我有一个这样的旋转图像:
我想做的是找到图像的边缘。那就是我想找到这张图片中看到的红色边缘:
我试图找到第一个和最后一个非零元素,然后将它们用作边缘的坐标。这很好(如果我真的可以让它工作的话)但它是不可扩展的,因为可能需要扩展红色边框以获得“更厚”的边框。本质上,我试图找到边界,因为我需要移动出现在旋转图像边缘的效果,我需要摆脱这些效果。如果有人能指出我合适的答案的方向(类似于边界框或类似的东西),我将不胜感激!
编辑根据@Jonas的建议 将我的编辑移至答案。
我有一个这样的旋转图像:
我想做的是找到图像的边缘。那就是我想找到这张图片中看到的红色边缘:
我试图找到第一个和最后一个非零元素,然后将它们用作边缘的坐标。这很好(如果我真的可以让它工作的话)但它是不可扩展的,因为可能需要扩展红色边框以获得“更厚”的边框。本质上,我试图找到边界,因为我需要移动出现在旋转图像边缘的效果,我需要摆脱这些效果。如果有人能指出我合适的答案的方向(类似于边界框或类似的东西),我将不胜感激!
编辑根据@Jonas的建议 将我的编辑移至答案。
我找到了一个合适的答案。根据用户Parag的建议,我对图像进行了二进制阈值化(大于 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提到的,二值化图像并不是解决这个问题的最可靠的方法,但由于我的图像在我看到它们之前形成的方式,我确信这至少对我的情况来说已经足够了。
一种简单的方法是使用旋转角度来计算旋转图像的角点。