【发布时间】:2015-07-30 01:00:18
【问题描述】:
我想做的事:-
使用 MATLAB,我正在尝试读取灰度图像(像素值范围为 0-255),即 8 位图像到 3 位图像,因此它就像将范围采样到 8 个不同级别。例如,如果像素值为 25,那么当它到达 bw 范围 0-31 时,它将被分配值 0,对于 bw 32-63,级别将为 1,依此类推,直到最终范围 224-255,它将在范围 7 上。
之后我计算不同级别的像素总数。
代码:-
img=imread('Cameraman.bmp');
r=size(img,1);
c=size(img,2);
pixel_count=zeros(9,1);
for i=1:r
for j=1:c
if fix(img(i,j)/31)==8
img(i,j)
end
img(i,j)=fix(img(i,j)/33);
pixel_count(img(i,j)+1)=pixel_count(img(i,j)+1)+1;
end
end
pixel_count
我的问题:-
即使每个像素的范围是0-255,我将它分为8个级别,我总共得到9个级别。
为了调试它,我在代码中添加了if statement,我的输出是:--
ans = 248
ans = 250
ans = 249
ans = 249
ans = 235
ans = 249
ans = 249
ans = 235
...and more
pixel_count =
11314
3741
2061
5284
12629
25590
4439
437
41
正如您所见,对于 249,235 等一些值,我获得了额外的第 9 级。
这里有什么问题。请帮忙。
谢谢。
【问题讨论】:
-
max(img(:))的结果是什么? -
@zeeMonkeez - 如果是
uint8,那么它应该是 255。任何更大的东西都会饱和,所以没有办法生成超过那么多的值。除此之外,OP 正在除以得到正确的 bin 的错误系数。 -
确实应该如此。我注意到了错误的系数(它应该是 32),但是 33 它仍然应该只产生 8 个 bin。
-
@zeeMonkeez - 正确的你就是那个!
-
@zeeMonkeez
img就像 2D 矩阵,我得到一整行 256 个值作为输出,没有超过 255 个元素。
标签: image matlab image-processing