根据对象边界框裁剪旋转图像 - Matlab

Posted

技术标签:

【中文标题】根据对象边界框裁剪旋转图像 - Matlab【英文标题】:Crop a rotated image based on the object bounding box - Matlab 【发布时间】:2019-07-07 12:25:18 【问题描述】:

为什么我不能根据对象(喷射)边界框裁剪旋转的图像,有没有更有效的方法呢? 基于上一个问题:Image single background color - Matlab

代码:

close all;
clear;
clc;

url='http://www.clker.com/cliparts/T/i/o/c/X/Q/airplane-md.png';
rgbImage = imread(url);
I = rgb2gray(rgbImage);

BI = imbinarize(I);
LI = bwlabel(BI);
mea = regionprops(LI, 'Orientation');
RI = imrotate(rgbImage, -mea(1).Orientation,'loose');
imshow(RI);

% Replace all black pixels with white 
inds = sum(RI,3)==0;
RI_new = RI;
RI_new(repmat(inds,1,1,3))=255;
imshow(RI_new);
title('RI new');

% Crop rotated image 
RI_newGray = rgb2gray(RI_new);
BI_newGray = imbinarize(RI_newGray);
LI_new = bwlabel(BI_newGray);
LI_new= bwareaopen(LI_new, 50);
bbmea = regionprops(LI_new, 'BoundingBox');
rect = bbmea.BoundingBox; 
RI_newGray = imcrop(RI_new, rect); 
imshow(RI_newGray);
title('crop RI new');

【问题讨论】:

运行您发布的代码时会发生什么?这种行为与您打算发生的行为有何不同?请具体说明问题的定义。 【参考方案1】:

替换:

bbmea = regionprops(LI_new, 'BoundingBox');

与:

bbmea = regionprops(~LI_new, 'BoundingBox');

说明:

问题是regionprops 计算非零元素组,在黑白逻辑图像中,函数计算白色像素组。要计算黑色像素的边界框,您可以反转图像。

使用bbmea = regionprops(LI_new, 'BoundingBox');

使用bbmea = regionprops(~LI_new, 'BoundingBox');

【讨论】:

以上是关于根据对象边界框裁剪旋转图像 - Matlab的主要内容,如果未能解决你的问题,请参考以下文章

opencv-python:如何用边界框坐标裁剪图像[重复]

旋转图片中的 ROI

在matlab中裁剪图像

如何使用边界框裁剪图像

使用边界框列表从图像中裁剪多个边界框

图像拼接基于matlab最低能量线裁剪图像拼接含Matlab源码 2127期