求助:MATLAB处理图像,已提取边缘,也得到了边缘的二值矩阵,提取坐标是用【m,n】 = find(BW==1)

MATLAB处理图像,已提取边缘,也得到了边缘的二值矩阵,提取坐标是用【m,n】 = find(BW==1),但是得到的坐标并不是连续的,我想得到按顺时针或逆时针排列的边缘点的坐标,请问有没有函数可以处理这个,或者提供一个编程思路也可以。

index(:,1) = m;
index(:,2) = n;
b = sortrows(index,1); % 按m排序
c = sortrows(index,2);  % 按n排序

追问

感谢你的帮助,我刚看了下sortrows的用法,简单理解就是按某一列将矩阵的行排序。但是我希望做的是得到一个连续的图像边缘的坐标,就比如(2,2),(3,3),(4,1)这样的点,就是index矩阵中下一行的坐标可以做到挨着上一行就好。不知道这样的要求你有没有办法处理?感激不尽

追答

sortrow是整行排序啊,不是单一列的。

>> a = [4 1; 3 3; 2 2];
>> sortrows(a,1)
ans =
     2     2
     3     3
     4     1

这不就是你要的结果么?

另外,你的检测结果是一个不规则的多边形,所以并不存在一个严格的顺时针或者逆时针。

建议你重新考虑一下,你需要这么做的目的是什么?可能并不需要你想的那么复杂。

追问

是这样,整体需要做的是提取这个边缘的一些特征,现阶段是想提取边缘的凹凸点,然后想法就是算每相邻两点之间的向量,然后每相邻两个向量做叉积,以此找到凹凸点,然后利用凹凸点算弦长弦距分叶等特征,但就在求相邻点向量的阶段出了问题,所以觉得应该求一个有顺序的连续点矩阵,这样才能保证n和n+1点,n+1,n+2这样的点之间做向量以后能描述边缘特征。

追答

你的追问和评论看了一下,针对你的检测结果,就会出现这样的情况。而且,对于比较光滑的图像边界而言,有时凹凸区域是一段光滑曲线,这种情况下是否需要定义一个凹凸点存在。
上述情况下,可以考虑先使用多边形来近似对象边界,然后得到凹凸点,具体可以参看冈萨雷斯“数字图像处理(MATLAB版)”第11章表示与描述中的节11.2.2使用最小周长多边形的多边形近似。
但我没有实现过类似的方法,建议仅供参考。

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-10-11
你好,请问你的代码编的怎么样了 我也碰到同样的问题,可不可以交流一下 谢谢~
相似回答