量化20以上的图像

时间:2018-02-18 18:14:28

标签: image matlab

我试图理解用图像量化的想法以及如何正确地做到这一点。所以我想做的图像是一个bmp文件。看看数学作品,我认为量化是实现这一目标的正确方法,并且我希望将图像均匀地量化为某些K等级。例如,我这样做了:

K4 = multithresh(I1,4);
I1_quant1 = imquantize(I1,K4);
No5 = figure;
image(I1_quant1);

并且之后有16个级别。这似乎运作良好。不幸的是,当我尝试用32和64这样做时,它不起作用。看看文档,我看到你不能超过20个。所以我试图找出那里出错的地方。

我尝试过同时使用linspace:

K64 = linspace(0,1,64); K64(1) = [];
I1_quant4 = imquantize(I1,K64);
No8 = figure;
image(K64(I1_quant4));

并根据某人的建议,推广linspace以帮助制作关卡:

NLevelsA = 32;
Levels = linspace(min(I1(:)), max(I1(:)), NLevelsA + 1); 
Levels(1) = [];
I1_quant3 = imquantize(I1,Levels(1));
No7 = figure;
image(K32(I1_quant3));

然而那些似乎不起作用,所以我要问这里可能有什么问题?

1 个答案:

答案 0 :(得分:0)

要将图像量化为N个不同的灰度级,所有级别等间距,您只需将图像置于[0,N]范围内,并将圆强度调低:

N = 28;
I1 = double(I1); % convert to double-precision so we can compute easily
I1 = I1 - min(I1(:));
I1 = I1 / max(I1(:)) * (N - 1e-9); % linear stretch to the range [0,N)
I1 = floor(I1);
I1 = uint8( I1 * 255 / (N-1) ); % stretch to full uint8 range and cast

显然,上面的代码会在输出灰度级之间产生不均匀的距离,因为我选择的值N并不能均匀地划分256。如果困扰你,你总是可以选择不缩放到[0,255]范围。