在二进制图像中用Matlab找到一个山谷

时间:2016-04-08 10:35:06

标签: matlab image-processing

我有一个像这样的二进制图像:

example of binary image

我知道黑色区域中一个点的位置(例如,X点),我需要在相同的黑色区域中找到谷(具有最低Y坐标的点)(在此示例中,O点) )。

图像中还有其他黑色区域。

我怎样才能使用Matlab做到这一点?

1 个答案:

答案 0 :(得分:3)

给定一个起点P =(x,y),你可以使用imfill来找到相应的连通分量,以及max和imfind的组合,以便找到它内的最低点。

%reads the image
I = imread('<your path>');

%sets an input point. For example: (250,100)
x = 100; y=250;

%Find the connected component of the given input point
BW2 = imfill(I,[y x]);
diffMat = BW2~=I;

%finds the minimal x and y indices of this connected component
[Y, X] = ind2sub(size(diffMat),find(diffMat));
maxInd = find(Y==max(Y),1,'first');

%prints the result
Y(maxInd)
X(maxInd)

给出以下输入:

enter image description here

结果是:

Y=313, X=304

请注意,此代码只找到一个点作为山谷。如果你想找到更多的点,你可以从find函数中省略这个参数并接收所有的谷点。