2015-06-24 19 views
-1

我得到了一個矩形的座標RECT = [xmin,ymin,width,height],它可以用來從圖像中修剪出一個補丁,比如說在Matlab中的I。但是實際上,我並不想裁剪補丁,而是想要在圖像上的矩形中使用(x,y)。目前我使用的方式是:如何將RECT = [xmin,ymin,width,height]轉換爲圖像的(x,y)s?

mask = false(size(I)); 
mask(RECT(2):RECT(2)+RECT(4), RECT(1):RECT(1)+RECT(3)) = 1; 
[xs,ys] = find(mask == 1); 

這種方式可行,但如果我有大量圖像需要很長時間。例如60,000個圖像。

所以,你能否告訴我,如果有快速的方法來實現相同的功能?

+0

謝謝你們!我找到了一個簡單的方法來獲得給定RECT = [x_min,y_min,width,height]的所有座標。請看我的答案。 –

回答

-1

如果它是你想的圖像I在編輯一個矩形,那麼最簡單的方法就是

I(xmin:xmax,ymin:ymax) = whatever; 

,或者在你的條件:

I(RECT(1):RECT(1)+RECT(3), RECT(2):RECT(2)+RECT(4)) = whatever; 

,而不實際創建一個面具。

matlab將解釋爲一個矩形(而不是一條對角線)。

您可能也想使用形式:

I(xmin:xmax,ymin:ymax) = SomeFunction(I(xmin:xmax,ymin:ymax)); 

我懷疑這會比使用meshgrid更快。

+0

OP需要矩形的**座標** - 不是一種更有效的方法來設置圖像中的值。 OP已經在使用'find'結合了這一點。引用:_「但是,不是裁剪補丁,而是實際上想要在圖像矩形中的(x,y)。」但是,你正確的做法是使用'meshgrid'來設置圖像中的值效率低,但這不是OP的目標。 – rayryeng

0

鑑於RECT = [x_min,Y_MIN,寬度,高度該方法是:

XYs = []; 
Xs = [x_min:x_min+width]'; 
Ys = [y_min:y_min+height]'; 
for i = 1:size(Xs,1) 
    XYs = cat(1, XYs, [Xs .* ones(size(Ys,1),1), Ys]); 
end 
clear Xs Ys 

只要小心結果XYS爲[列,行]。謝謝!

+0

我的'meshgrid'方法不適合你嗎?我個人認爲它比你的循環更有效率。 – rayryeng

相關問題