2012-02-13 129 views
6

我想繪製一個矩形來勾勒出我在一個圖形的一個軸上繪製的圖像區域。我在這個圖中有多個軸,所以我使用了rectangle()函數。我想要的是在矩形的外面和外面畫一個白色的矩形。矩形內的圖像部分應該是可見的,所以'facecolor'應該是'none'。我已經嘗試繪製3個矩形,兩個黑色的線寬較細和一個較厚的白色,但問題在於'位置'是以軸爲單位定義的,'線寬'是以點爲單位定義的,所以縮放不起作用太好了,特別是當這個數字被調整時。如何創建一個帶有輪廓邊框的矩形?

僅供參考,輪廓使白色矩形在淺色背景下更明顯。繪製的圖像變化很大,因此單個顏色對於我的數據不是普遍可見的。

有關我如何做到這一點的任何建議?

回答

7

如何爲黑白矩形使用不同的線寬?

imshow('cameraman.tif') 
rectangle('position',[80 30 100 100],'edgecolor','k','LineWidth',4) 
rectangle('position',[80 30 100 100],'edgecolor','w','LineWidth',1) 

cameraman with rectangle (Save As)

嗯,邊角看起來MATLAB的數字比爲PNG文件要好得多。

更好地與getframe

cameraman with rectangle (getframe)

+0

工作得很好,用於將矩形到正常的MATLAB圖。 – 2013-12-31 09:04:17

3

我喜歡@Yuks解決方案。但還有另一種可能性,你可以考慮:

你也可以計算矩形內像素的平均值,並將框的顏色設置爲逆。 這樣,你總是會有一個很好的對比。

enter image description here

下面是代碼:

function PlotRect(im,x,y,w,h) 
    m = double(im(round(y): round(y+h) , round(x): round(x+w),:)); 
    if (mean(m(:)) < 255/2) 
     col = [1 1 1]; 
    else 
     col = [0 0 0]; 
    end 
    rectangle('Position',[x y w h],'EdgeColor', col); 
end 

而且測試:

function Inverse() 

    im = imresize(uint8(0:5:255), [250, 400]) ; 
    figure;imshow(im); hold on; 

    PlotRect(im,5,8,50,75); 
    PlotRect(im,100,30,25,42); 
    PlotRect(im,200,10,40,40); 
    PlotRect(im,300,10,40,40); 
end 
2

育的解決方案工作得很好添加矩形正常MATLAB的情節,太。的「位置」的值不interpretet作爲像素而被調整爲積值(參見下面的代碼示例):

figure; 
plot(0:10,0:10); grid on; 

hold on; 
rectangle('position',[1 1 8.5 8.5],'LineWidth',2); 
hold off; 

該代碼產生以下情節: enter image description here