2012-12-12 120 views
4

我正在matlab上工作,我想做一個交互式選擇,就像使用函數roipoly時一樣,但我想選擇一個圓或圓或一個正方形。我已經搜索funcion來選擇感興趣的區域(ROI),就像您使用roipoly時選擇的一樣,但是使用圓形或方形但我找不到任何東西。在matlab中選擇一個ROI(圓形和方形)以便通過濾波器

任何提示?

我已經嘗試過使用輸入法。

[X, Y]= ginput(2) 

xmin=min(X) 
xmax=max(X) 
ymin=min(Y) 
ymax=max(Y) 

在此代碼我定義的平方(用戶與ginput定義了2個點)的拐角處。但是當我檢查圖像的要點時,他們是錯誤的。我認爲是因爲這個數字的大小在情節上不一樣。

選擇我想要的ROI的最佳方式是使用類似於roipoly的函數,但是對於圓和方形而不是多邊形。使用這種類型的功能,我只能使用「ginput」在圖片內選擇點,如果用戶選擇圖中的任何點(問題是它們不匹配,則必須輸入錯誤消息)我可以選擇的點大於圖像的大小)。

回答

1

實際上有這裏有兩個問題:

1)什麼是不對您的GINPUT代碼 和 2)如何寫roiCircle或roiSquare

在回答(1),什麼是錯的;該代碼的行爲,因爲它應該:

imgData = randn(100); 
imagesc(imgData); 
[X, Y]= ginput(2) 

xmin=min(X); 
xmax=max(X); 
ymin=min(Y); 
ymax=max(Y); 

squareX = [xmin xmin xmax xmax xmin]; 
squareY = [ymin ymax ymax ymin ymin]; 
hold on; 
plot(squareX,squareY); %plot the correct square 
hold off; 

您可以使用IMCROP得到數據:

width = xmax - xmin; 
height = ymax - ymin; 
imgSelect = imcrop(imgData,[xmin,ymin,width,height]); 
figure; imagesc(imgSelect); 

至於(2)(寫roiCircle或roiSquare),讓他們很好的更新像roiPoly那麼,這些將需要一個重要的(但不是無法克服的)量的MATLAB GUI編程。這很容易處理,但不是微不足道的。

+0

我想在圖像中選擇正方形或圓形,然後在其上應用濾鏡,然後用應用了濾鏡的圓形或正方形顯示圖像。隨着roipoly很容易做到這一點,但做一個正方形或一個圓圈我不知道該怎麼做。我認爲我不能用函數ginput來做到這一點。 –

1

我設法使用下面的技術來實現的交互區域的選擇(對我來說一個圓圈):

  1. 使用Get第一點內置ginput(1):

    [X1, Y1] = ginput(1); 
    xp = [X1 Y1]; 
    
  2. 產生的圓柄:

    h = plot(X1, Y1, 'r'); 
    
  3. 設置一個CUS湯姆MouseMove事件處理程序來選擇第二點:

    set(gcf, 'WindowButtonMotionFcn', {@mousemove, h, xp}); 
    
  4. 等待用戶點擊,而處理器的工作它的魔力:

    k = waitforbuttonpress; 
    
  5. 最後禁用的處理程序:

    set(gcf, 'WindowButtonMotionFcn', ''); 
    

事件處理程序如下:

function mousemove(object, eventdata, h, xp) 
cp = get(gca, 'CurrentPoint'); 
r = norm([cp(1,1) - bp(1) cp(1,2) - bp(2)]); 
theta = 0:.1:2*pi; 
xc = r*cos(theta)+bp(1); 
yc = r*sin(theta)+bp(2); 
set(h, 'XData', xc); 
set(h, 'YData', yc); 
end 

Et瞧。這很好用,調用函數可以看到r,所以你可以使用它。