1

使用matlab。

假设我有:

  • 水平方向像素i数为“MaxWidth”,垂直方向像素数为“MaxHeight”的图像。
  • 由左上角和右下角像素的坐标定义的矩形 ROI,如

ROI = [yleft , xleft ; yright , xright]

我想知道最快的计算方法是什么,只包含给定 ROI 内部和内部的像素的图像i_crop在哪里。i_cropi

像 400x400 图像中的 ROI[-10 , -10 ; 1000 , 1000]应该被视为[1 , 1 ; 400 , 400]


到目前为止,我想出了这两个:

作物1

ROI(ROI<1)=1;
ROI(ROI(:,1)>MaxHeight) = MaxHeight;
ROI(find(ROI(:,2)>MaxWidth)+2) = MaxWidth;
i_crop = i(ROI(1,1):ROI(2,1),ROI(1,2):ROI(2,2),:); 

作物2

ymin = ROI(1,1);
xmin = ROI(1,2);
ymax = ROI(2,1);
xmax = ROI(2,2);

if ymin < 1
  ymin = 1;
end
if xmin < 1
  xmin = 1;
end
if ymax < 1
  ymax = 1;
end
if xmax < 1
  xmax = 1;
end

if ymin > MaxHeight
  ymin = MaxHeight;
end
if ymax > MaxHeight
  ymax = MaxHeight;
end
if xmin > MaxWidth
  xmin = MaxWidth;
end
if xmax > MaxWidth
  xmax = MaxWidth;
end

i_crop = i(ymin:ymax,xmin:xmax,:);

后者运行得更快:

>> im = imread('peppers.png');
>> tic, for i =1:100000 i_c = crop1(im,[0 0 ; 60 60],512,384); end; toc;
Elapsed time is 2.053574 seconds.
>> tic, for i =1:100000 i_c = crop2(im,[0 0 ; 60 60],512,384); end; toc;
Elapsed time is 1.667059 seconds.

希望我说清楚了,提前谢谢!

4

0 回答 0