这种方法从整个图像开始,逐个像素地收缩每个边框,直到找到可接受的矩形.
在示例图像上运行大约需要0.02秒,因此速度相当快.
编辑:我应该澄清,这不是一个通用的解决方案.该算法依赖于矩形居中并且具有与图像本身大致相同的宽高比.但是,在适当的情况下,它很快. @DanielHsH提供了一个解决方案,他们声称在所有情况下都可以使用.
代码:
clear; clc;
tic;
%% // read image
imrgb= imread('box.png');
im = im2bw(rgb2gray(imrgb)); %// binarize image
im = 1-im; %// convert "empty" regions to 0 intensity
[rows,cols] = size(im);
%% // set up initial parameters
ULrow = 1; %// upper-left row (param #1)
ULcol = 1; %// upper-left column (param #2)
BRrow = rows; %// bottom-right row (param #3)
BRcol = cols; %// bottom-right column (param #4)
parameters = 1:4; %// parameters left to be updated
pidx = 0; %// index of parameter currently being updated
%% // shrink region until acceptable
while