使用matlab。
假设我有:
- 水平方向像素
i
数为“MaxWidth”,垂直方向像素数为“MaxHeight”的图像。 - 由左上角和右下角像素的坐标定义的矩形 ROI,如
ROI = [yleft , xleft ; yright , xright]
我想知道最快的计算方法是什么,只包含给定 ROI 内部和内部的像素的图像i_crop
在哪里。i_crop
i
像 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.
希望我说清楚了,提前谢谢!