求解旋转图像的最大内接矩形

本文介绍了在机器学习和深度学习的数据增强中,如何解决旋转图像后的最大内接矩形问题。通过分析旋转中心在图像中心的情况,推导出计算内接矩形的边界条件,以避免旋转产生的空白区域。内容涵盖了旋转角度的特殊情况及其对应的边界处理策略。
摘要由CSDN通过智能技术生成


本系列文章由 @yhl_leo 出品,转载请注明出处。
文章链接: http://blog.csdn.net/yhl_leo/article/details/51510432


工程源码GitHub: yhlleo/ImageDataAugmentation

编译环境:

  • CMake
  • OpenCV
  • Visual Studio 2010

在机器学习和深度学习中,通常使用为了增加数据(Data Augmentation)可以对数据进行例如一系列的旋转(rotate)、镜像(flip)等操作,本文将讲解如何求取旋转图像的最大内接矩形问题,这里的内接矩形,并不是数学上严格的内接概念,而是获得的矩形是不含如图 1所示的旋转导致的空白区域。

求轮廓最大内接矩形的方法有很多,这里介绍一种基于最小外接矩形的方法: 1. 首先,使用`bwboundaries`函数提取出二值图像中的轮廓点; 2. 然后,使用`regionprops`函数计算出轮廓的最小外接矩形(即包围轮廓的最小面积矩形)的信息,包括中心点坐标、长宽、旋转角度等; 3. 接下来,将最小外接矩形顺时针旋转一个角度,使其边平行于坐标轴,这样最小外接矩形就变成了最小面积矩形; 4. 然后,使用二分查找算法,不断缩小最小面积矩形的大小,直到其内部完全覆盖住轮廓点,此时得到的矩形即为所求的最大内接矩形。 以下是 MATLAB 代码实现: ```matlab % 读入二值图像 I = imread('binary.png'); % 提取轮廓 B = bwboundaries(I); boundary = B{1}; % 计算最小外接矩形 stats = regionprops(I, 'Orientation', 'BoundingBox', 'Centroid'); orient = stats(1).Orientation; center = stats(1).Centroid; bbox = stats(1).BoundingBox; % 顺时针旋转最小外接矩形,使其变成最小面积矩形 theta = -orient; R = [cosd(theta) -sind(theta); sind(theta) cosd(theta)]; boundary = boundary - repmat(center, size(boundary, 1), 1); boundary = (R * boundary')'; bbox(1:2) = bbox(1:2) - center; bbox(1:2) = R * bbox(1:2)'; bbox(3:4) = bbox(3:4) * max(abs(cosd(theta)), abs(sind(theta))); % 二分查找最大内接矩形 left = 0; right = min(bbox(3:4)); while right - left > 1e-5 mid = (left + right) / 2; rect = [bbox(1) + (bbox(3) - mid) / 2, bbox(2) + (bbox(4) - mid) / 2, mid, mid]; if inpolygon(rect(1), rect(2), boundary(:,1), boundary(:,2)) left = mid; else right = mid; end end % 绘制最大内接矩形 hold on; rectangle('Position', [bbox(1) + (bbox(3) - left) / 2, bbox(2) + (bbox(4) - left) / 2, left, left], 'EdgeColor', 'r', 'LineWidth', 2); ``` 其中,`binary.png`是一个二值图像文件。注意,此方法求解的是最大内接矩形而非最优内接矩形,因此可能存在多个符合条件的矩形,而以上代码只会绘制其中一个。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值