我想绘制一个矩形来勾勒出我在图的一个轴上绘制的图像区域。我在这个图中有多个轴,所以我使用的是rectangle()函数。我想要的是在内部和矩形外部绘制一个白色矩形,一个薄的黑色边框。矩形内部的图像部分应该是可见的,因此所有'facecolor'都应该是'none'。我尝试绘制3个矩形,两个黑色的线条和一个较粗的白色矩形,但问题是“位置”是以轴为单位定义的,“LineWidth”是以点为单位定义的,因此缩放不起作用太好了,特别是当数字调整大小时。
仅供参考,轮廓使得白色矩形在浅色背景下更明显。绘制的图像差异很大,因此我的数据不会普遍显示单一颜色。
关于我如何做到这一点的任何建议?
答案 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)
嗯,这些角在MATLAB图上看起来要好于PNG文件。
更好地使用getframe
:
答案 1 :(得分: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
答案 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;
此代码产生以下图表: