我试图理解用图像量化的想法以及如何正确地做到这一点。所以我想做的图像是一个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));
然而那些似乎不起作用,所以我要问这里可能有什么问题?
答案 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]范围。