在matlab中将图像分成两个非矩形非方形子图像

时间:2015-03-10 17:12:35

标签: image matlab matrix binary divide

假设我有这样的图像: http://www.mathworks.com/help/releases/R2015a/examples/images/BasicImageImportProcessingAndExportExample_03.png

(这是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>

2 个答案:

答案 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的区域的阈值。