I am trying to quantize an image into 12 bit intensity using the below code:
R2D = mat2gray(R2D); % intensity between [0,1] Double
R2D = double(uencode(R2D,12)); % intensity between [0,2^12] integer
PIC = mat2gray(R2D); % intensity between [0,1] Double
imshow(pic);
the problem is in 'uencode' function , the input must be in the range of [-1,1], is there a way to do that quantization for input values between [0,1]? may be some changes to the 'uencode' will do job :)
Many thanks

 採用された回答

Alan AF
Alan AF 2012 年 2 月 10 日

0 投票

Thank you, I found the Solution:
R2D = mat2gray(R2D);
[R2D8,map] = gray2ind(R2D,128);
pic = ind2gray(R2D8,map);
pic = mat2gray(pic);
imshow(pic);

1 件のコメント

Image Analyst
Image Analyst 2012 年 2 月 10 日
This does 128 gray levels, not 4096.

サインインしてコメントする。

その他の回答 (1 件)

Image Analyst
Image Analyst 2012 年 2 月 10 日

0 投票

How about using code like:
actualMin = double(min(min(imgOriginal)));
actualMax = double(max(max(imgOriginal)));
slope = (desiredMax - desiredMin) / (double(actualMax) - double(actualMin));
scaledImage = slope * (double(imgOriginal) - actualMin) + desiredMin;

2 件のコメント

Alan AF
Alan AF 2012 年 2 月 10 日
Thanks for your reply
Actually my intention is to Quantize the Image (i.e store every pixel into an 12 bit integer), is there a way to do that?
many thanks :)
Image Analyst
Image Analyst 2012 年 2 月 10 日
I didn't think that was your intention because at the end you called mat2gray() which forces it into a 0-1 range, which pretty much wipes out quantization - not quite but for most intents and purposes it does. And the quantized intermediate images, you didn't do anything with.

サインインしてコメントする。

カテゴリ

製品

質問済み:

2012 年 2 月 10 日

編集済み:

2013 年 10 月 8 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by