About quantization of image

6 views (last 30 days)
sweta arya
sweta arya on 27 Jun 2015
Answered: Ashish Uthama on 29 Jun 2015
i am trying to do uniform quantization on a gray scale image. i have to generate different images matrix for different K levels using imquantize() function and display all images. please let me know how to do that in MATLAB
  2 Comments
Geoff Hayes
Geoff Hayes on 27 Jun 2015
sweta - have you looked at the examples from imquantize?
sweta arya
sweta arya on 28 Jun 2015
yes,they only display images like one image for 256 level,then one for 16 levels.but i want images for all 16 levels,if my image is quantizing to 16 levels.

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 28 Jun 2015
Put it in a for loop
grayImage = imread('coins.png');
% Split the image into eight levels by obtaining seven thresholds from multithresh.
for numLevels = 1 : 16
thresh = multithresh(grayImage, numLevels);
% Construct the valuesMax vector such that the maximum value
% in each quantization interval is assigned to the eight levels of the output image.
valuesMax = [thresh max(grayImage(:))]
[quant8_I_max, index] = imquantize(grayImage,thresh,valuesMax);
valuesMin = [min(grayImage(:)) thresh]
quant8_I_min = valuesMin(index);
% Display both eight-level output images side by side.
figure;
imshowpair(quant8_I_min,quant8_I_max,'montage')
title('Minimum Interval Value Maximum Interval Value')
% Set up figure properties:
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% Get rid of tool bar and pulldown menus that are along top of figure.
set(gcf, 'Toolbar', 'none', 'Menu', 'none');
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
end

More Answers (1)

Ashish Uthama
Ashish Uthama on 29 Jun 2015
"i want images for all 16 levels"
I interpreted it as - quantize to 16 levels and give me a mask for each of those levels. (Though, now I think IA's answer above might be what you were looking for).
im = magic(5);
lvls = multithresh(im,3);
qm = imquantize(im,lvls)
qm =
3 4 1 2 3
4 1 1 3 3
1 1 2 4 4
2 2 4 4 1
2 3 4 1 2
imlvl1 = false(size(im));
% Replace 1 with any of the resulting 4 levels
imlvl1(qm==1)= true
imlvl1 =
0 0 1 0 0
0 1 1 0 0
1 1 0 0 0
0 0 0 0 1
0 0 0 1 0

Community Treasure Hunt

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

Start Hunting!