我需要在matlab中对图像进行二值化,静态阈值为平均强度的10%。我使用mean2(Image)
找到平均强度,这会在其中一个图片中返回一个平均值15.10
。因此,我的平均阈值为1.51
。im2bw(image,level)
的阈值介于0到1之间。如何在matlab中将我的图像二值化?
答案 0 :(得分:3)
1)您可以先使用im2double()
将原始图像转换为双重格式。然后所有像素值将介于0和1之间。然后您可以使用im2bw(im,level)
。
2)如果您不想将图像转换为双倍,那么您可以这样做。假设阈值是平均值的10%,比如threshold = 1.51
。我们用im
表示你的图像。然后是im(im<threshold) = 0; im(im>=threshold)=1
。完成这两项操作后,im
将成为二进制图像。
答案 1 :(得分:2)
您可以使用简单的逻辑语句对图像进行二值化。为了完整起见,我也添加了阈值确定。
threshold = mean(Image(:));
binaryMask = Image > 0.1 * threshold;
答案 2 :(得分:2)
如果你想使用im2bw
(你提到的其他解决方案当然是正确的和有效的),你需要规范化平均值与图像最大强度的结果:
ImageN=Image./max(Image(:))
t = mean2(ImageN) * 0.1 % Find your threshold value
im2bw(Image,t)
答案 3 :(得分:1)
假设您的图片是矩阵img
,您可以执行以下操作:
t = mean2(img) * 0.1 % Find your threshold value
img(img < t) = 0 % Set everything below the treshold value to 0
img(img ̃= 0) = 1 % Set the rest to 1