如何在MATLAB中将灰度图像转换为二进制

时间:2013-12-13 14:41:14

标签: matlab image-processing binary grayscale

我必须编写一个程序,将强度图像转换为黑白图像。我只是想我可以从原始矩阵中取一个值,如果它高于平均值,则使另一个数组中的相应单元格等于1,否则等于零:

for x=1:X
    for y=1:Y
        if I(x,y)>mean(I(:))
            bw(x,y)=1;
        elseif I(x,y)<mean(I(:))
            bw(x,y)=0;
        end
    end
end
image(bw)

不幸的是,我得到的图像都是黑色的。为什么呢?

我在uint8,顺便说一下。 2-Lena.tiff图像

3 个答案:

答案 0 :(得分:8)

使用此:

bw = im2bw(I, graythresh(I));

这里是im2bw;

的文档

使用imshow(I,[]);,不会评估0到255之间的图像,而是评估min(I(:))max(I(:))之间的图像

修改

您可以更改graythresh(I)任何其他级别。您仍然可以使用图像的平均值。 (归一化在0和1之间)。

maxI = max(I(:));
minI = min(I(:));

bw = im2bw(I,(maxI - mean(I(:)))/(maxI - minI));

答案 1 :(得分:4)

使用imagesc(bw)(而不是image(bw))。这会自动缩放图像范围。

另请注意,您可以使用此向量化,更高效的版本替换所有代码:

bw = double(I>mean(I(:)));

答案 2 :(得分:2)

一个问题是你总是使用mean,直到那时。

您要做的是在循环之前执行此操作:

myMean = mean(I(:));

然后将所有mean(I(:))的{​​{1}}替换为myMean

使用正在运行的平均值肯定会减慢速度,但这并不是它变得全黑的原因。