6

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

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

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

4

3 回答 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)

带矩形的摄影师(另存为)

嗯,MATLAB 图上的角看起来比 PNG 文件好得多。

更好的getframe

带矩形的摄影师(getframe)

于 2012-02-13T20:34:18.887 回答
3

我喜欢@Yuks 解决方案。但是您可以考虑另一种可能性:

您还可以计算矩形内像素的平均值,并将框颜色设置为相反。这样,您将始终拥有良好的对比度。

在此处输入图像描述

这是代码:

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
于 2012-02-13T21:18:18.860 回答
2

Yuk 的解决方案也非常适合将矩形添加到普通的 MATLAB 图中。“位置”值不解释为像素,而是调整为绘图值(参见下面的代码示例):

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

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

此代码产生以下图: 在此处输入图像描述

于 2013-12-31T09:13:10.410 回答