8bit画像を4bitにimquantize
8 次查看(过去 30 天)
显示 更早的评论
添付の画像ファイル(256*256,unit8)を4bit/pixelにquantizeしたく以下のコマンドを試したのですが、画像を表示させてさい真っ白の画像になってしまいました。解決法、また間違いありましたらご指摘頂けると幸いです。
img = imread('lenna_grey');
thresh = multithresh(img);
img_quant = imquantize(img, 3);
figure, imshow(img_quant);
0 个评论
采纳的回答
kenya tanaka
2017-9-16
编辑:kenya tanaka
2017-9-16
掲載されたプログラムでは二値化(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 个评论
kenya tanaka
2017-9-16
上記投稿ですが、やってみたら真っ白でした。
対処法として、
①モノクロ画像として処理する。
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
2017-9-17
编辑:Kei Otsuka
2017-9-17
少し細かいですが、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)
更多回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 イメージ タイプの変換 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!