如何创建带边框轮廓的矩形?

时间:2012-02-13 20:24:30

标签: matlab graphics matlab-figure

我想绘制一个矩形来勾勒出我在图的一个轴上绘制的图像区域。我在这个图中有多个轴,所以我使用的是rectangle()函数。我想要的是在内部和矩形外部绘制一个白色矩形,一个薄的黑色边框。矩形内部的图像部分应该是可见的,因此所有'facecolor'都应该是'none'。我尝试绘制3个矩形,两个黑色的线条和一个较粗的白色矩形,但问题是“位置”是以轴为单位定义的,“LineWidth”是以点为单位定义的,因此缩放不起作用太好了,特别是当数字调整大小时。

仅供参考,轮廓使得白色矩形在浅色背景下更明显。绘制的图像差异很大,因此我的数据不会普遍显示单一颜色。

关于我如何做到这一点的任何建议?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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 :(得分:2)

Yuk的解决方案也适用于在普通MATLAB图中添加矩形。 'position'值不是解释为像素,而是调整为绘图值(参见下面的代码示例):

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