2013-02-24 48 views
2

我有这样的旋转图像:enter image description here找到旋转图像的边框

我想要做的是找到图像的边缘。这是我想要找到在此图像中看到的红色边缘: enter image description here

我试图找到第一个和最后一个非零元素,然后使用这些作为边缘的坐标。这很好(如果我真的可以让它工作),但它不可扩展,红色边框可能需要扩展以获得“较厚”边框。基本上,我试图找到边框,因为我需要移动出现在我需要摆脱的旋转图像边缘的效果。如果有人能够指出我的方向是合适的答案(沿着边界框或类似的线),我会非常感激!

编辑 将我的编辑按照@Jonas的建议移动回答。

+0

你是指较粗的边界是什么意思?无论如何,你可以将这个图像转换为二值图像,其中0作为阈值,然后使用找到的最小边界矩形[这里](http://www.mathworks.com/matlabcentral/fileexchange/34767-a-suite-of-minimal-边界的对象)。但是,我必须说,转换成二进制并不是一个强有力的方法。 – 2013-02-24 06:29:42

+0

@Parag对不起,我的意思是,如果有1像素厚,我用它来删除边框,我可能想要进一步扩大去除图像(2像素,3等)。另外我刚刚使用了(a> 0)= 255;创建一个二进制图像,它*似乎*工作。感谢您的建议,我会尝试一下。 – user901898 2013-02-24 06:36:52

+0

@ user901898:如果您自己找到了有用的答案,请将其添加为下面的实际答案,而不是编辑您的问题。 – Jonas 2013-02-24 14:14:26

回答

2

我找到了一个合适的答案。从用户Parag的建议我二进制thresholded图像(任何大于0)。然后我应用了Sobel边缘检测。这会创建一个包含图像边缘的二值图像,然后根据需要使用形态扩大来“扩大”边框。

的代码我使用:

I = imread('outputTest.jpg'); 
B = I; 
B(B > 0) = 255; 
BW = edge(B,'sobel'); 
SE = strel('rectangle', [5 5]); 
BW = imdilate(BW,SE); 
I2 = I; 
I2(BW > 0) = 0; 

由于Parag提到binarising图像不解决这个的,但由于之前我看到他们被我的形成图像的方式最可靠的方法,我敢肯定至少这对我的情况来说已经足够了。

0

一个简单的方法是使用旋转角度计算旋转图像的角点。