(这是matlab中的原始图像 pout.tif )
并帮助图片(二元面具)像这样: http://upload7.ir/uploads//df17be22203e3099ba0d86e7cb203477bc909244.jpg
(与原始图像的大小相同)
我写了这个简单的代码,用于将原始图像分成两个图像:
I=imread('pout.tif');
figure,imshow(I),title('original image')
Ih=imread('helpPic.jpg');
Ih=rgb2gray(Ih);
Ih=im2bw(Ih);
figure,
imshow(Ih),title('help image')
im1=I.*uint8(Ih);
figure,
imshow(im1),title('im1')
im2=I.*uint8(1-Ih);
figure,
imshow(im2),title('im2')
结果:
http://upload7.ir/uploads//12f09dde101cd4c98b53fcc0d400be87029ee07a.png
并且知道我想实现Otsu的方法来对这些子图像进行二值化(im1和im2),如何在信息的一部分(子图像的非零部分)上实现otsu的方法 ?< / p>
答案 0 :(得分:1)
图像处理工具箱中的graythresh
功能实现了Otsu的方法。此外,由于Otsu的方法只关心像素的值而不是它们的位置,所以在应用graythresh
之前,您可以在一维数组中重新排列感兴趣的像素。
在实践中,这给出了紧凑的以下代码:
level1 = graythresh(I(Ih(:)));
level2 = graythresh(I(~Ih(:)));
最佳,
答案 1 :(得分:1)
由于Matlab的graythresh
(实现Otsu计算阈值的方法)使用I(:)并忽略I的维度(如果你{{1},你可以看到}),你可以使用
edit gryythresh
计算掩码为1的区域的阈值。