我在MATLAB中有一个RGB图像m
IMG http://i62.tinypic.com/2nqy5uv.jpg
我使用公式
对其进行了标准化im = mean(m,3);
im = (im-min(im(:))) / (max(im(:))-min(im(:)));
我读到标准化模块拉伸图像像素值以覆盖整个像素值范围(0-1)但我在标准化图像的直方图中仍然有0到1之间的一些步骤。
任何人都可以通过解释这些灰度值的原因来帮助我。
谢谢
答案 0 :(得分:2)
我假设您使用三个组件的平均值而不是函数rgb2gray
,因为它在您的情况下具有一些优势。 (rgb2gray
执行类似的操作:它使用加权和)。
减去最小值并除以最大值并不会将图像转换为二进制。它只会将所有值缩放到范围(0,1),这在您的示例中就是这种情况。这仅表示所有值介于 0和1之间,而不是完全为0或1.如果需要二进制图像,即仅为0和1,则需要使用阈值来转换灰度图像二进制。
经常使用的方法是使用Otsu的方法计算阈值:
threshold = graythresh(im); % calculate threshold
binaryImage = im2bw(im,threshold); % convert image to binary
如果您的图片保存为uint8
,则规范化图片应将图片转换为二进制,因为uint8
只能处理整数,而且之间的任何数字都是四舍五入的。这意味着您假设最佳阈值为0.5。