2012-02-13 138 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