如何在MATLAB中实现灰度图像的二值化
我必须编写一个程序,将强度图像转换成黑白图像。我只是想从原始矩阵I中取一个值,如果它高于平均值,则使另一个数组中的对应单元格等于1,否则等于零:如何在MATLAB中实现灰度图像的二值化,matlab,image-processing,binary,grayscale,Matlab,Image Processing,Binary,Grayscale,我必须编写一个程序,将强度图像转换成黑白图像。我只是想从原始矩阵I中取一个值,如果它高于平均值,则使另一个数组中的对应单元格等于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) 对于x=
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)
对于x=1:x
对于y=1:y
如果I(x,y)>平均值(I(:)
bw(x,y)=1;
如果I(x,y)使用imagesc(bw)
(而不是images(bw)
)。自动缩放图像范围的
另外,请注意,您可以使用此矢量化、更高效的版本替换所有代码:
bw = double(I>mean(I(:)));
使用以下命令:
bw = im2bw(I, graythresh(I));
这里是文件
使用imshow(I,[])
,不计算介于0和255之间的图像,而是计算介于min(I(:)
和max(I(:)
编辑
您可以通过任何其他级别更改灰度阈值(I)
。您仍然可以使用图像的平均值。(在0和1之间进行规格化)
一个问题是,您一直在使用mean
直到那时
您要做的是在循环之前执行以下操作:
我的平均数=平均数(I(:)
然后用myMean
替换以下所有出现的mean(I(:)
)
使用“跑步”意味着你现在肯定会放慢速度,但这不是它变为全黑的原因。uint8意味着白色是255,而不是1。你的意思是什么<代码>I
未被覆盖。这当然是低效的,但它不是一个运行的手段<代码>平均值(I(:)是每个time@LuisMendo你说得对,那样的话,我的观点就不那么重要了。我已经编辑了我的答案。之前找到“平均值”使它更快。
maxI = max(I(:));
minI = min(I(:));
bw = im2bw(I,(maxI - mean(I(:)))/(maxI - minI));