8bit画像を4bitにimquantize
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Naoki Ishibashi
am 15 Sep. 2017
Beantwortet: Naoki Ishibashi
am 18 Sep. 2017
添付の画像ファイル(256*256,unit8)を4bit/pixelにquantizeしたく以下のコマンドを試したのですが、画像を表示させてさい真っ白の画像になってしまいました。解決法、また間違いありましたらご指摘頂けると幸いです。
img = imread('lenna_grey');
thresh = multithresh(img);
img_quant = imquantize(img, 3);
figure, imshow(img_quant);
0 Kommentare
Akzeptierte Antwort
kenya tanaka
am 16 Sep. 2017
Bearbeitet: kenya tanaka
am 16 Sep. 2017
掲載されたプログラムでは二値化(1bit化)になっています。 このように書けば、4bit化(16値化)実現できるかと思います。
img = imread('lenna_grey');
thresh = multithresh(img,15);
img_quant = imquantize(img, thresh);
figure, imshow(img_quant);
imquantizeの返り値はdoubleです。 double型変数をimshowした場合、標準で0を黒とし1を白として表現されます。
imshow(img_quant,[1 16]);
imshowに最大値と最小値を別途与えることで、お望みの画像が得れるかと思います。
2 Kommentare
kenya tanaka
am 16 Sep. 2017
上記投稿ですが、やってみたら真っ白でした。
対処法として、
①モノクロ画像として処理する。
img=rgb2gray(imread('wpwxunob.bmp'));
..
imshow(img_quant,[0 16]);
②img_quantを成型する。
..
img_quant=imquantize(img, thresh);
img_quant_min=min(img_quant(:));
img_quant_max=max(img_quant(:));
I=(img_quant-img_quant_min)./img_quant_max;
imshow(I);
これでお望みの画像が得れるかと思います。
Kei Otsuka
am 17 Sep. 2017
Bearbeitet: Kei Otsuka
am 17 Sep. 2017
少し細かいですが、16を表現するためには5bit必要になってしまいますので、量子化後に1を減算してあげるとより正確ですね。 整理しますと、
画像を読み込み
img = imread('coins.png');
4bit/pixelにするために閾値を計算
thresh = multithresh(img,15);
量子化実行(-1を忘れずに)
img_quant = imquantize(img, thresh) - 1;
結果を可視化
imshow(img_quant,[])
min,max関数を使えば、最小値が0、最大値が15になっていることを確認できます。 また、この場合画像データのデータ型はdoubleですが、Fixed-Point Designerをお持ちであれば、明示的に4bit固定小数点データ型への変換が可能です。
fiimg = fi(img_quant,0,4,0)
Weitere Antworten (1)
Siehe auch
Kategorien
Mehr zu イメージ タイプの変換 finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!