Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在MATLAB中的图像上画圆?

我在MATLAB中有一张图片:

im = rgb2gray(imread('some_image.jpg'); % normalize the image to be between 0 and 1 im = im/max(max(im)); 我已经进行了一些处理,得出了许多要强调的要点:

points = some_processing(im); 其中points是一个矩阵,大小与im相同,有趣点的大小相同。

现在,我想在points为1的所有位置上在图像上绘制一个圆。

MATLAB中有执行此功能的函数吗?我能想到的最好的是:

[x_p, y_p] = find (points); [x, y] = meshgrid(1:size(im,1), 1:size(im,2)) r = 5; circles = zeros(size(im)); for k = 1:length(x_p) circles = circles + (floor((x - x_p(k)).^2 + (y - y_p(k)).^2) == r); end % normalize circles circles = circles/max(max(circles)); output = im + circles; imshow(output) 这似乎有点不雅。有没有办法绘制类似于line功能的圆?


回答:
您可以使用带有圆形标记点的普通PLOT命令:

[x_p,y_p] = find(points); imshow(im); %# Display your image hold on; %# Add subsequent plots to the image plot(y_p,x_p,'o'); %# NOTE: x_p and y_p are switched (see note below)! hold off; %# Any subsequent plotting will overwrite the image! 您还可以调整绘图标记的其他这些属性: MarkerEdgeColorMarkerFaceColorMarkerSize

如果随后要保存新图像并在其上绘制标记,则可以查看这个答案,我回答了一个有关从图形保存图像时保持图像尺寸的问题。

注意:使用IMSHOW (或IMAGE等)绘制图像数据时,对行和列的常规解释实际上会发生翻转。通常,数据的第一维(即行)被认为是x轴上的数据,这可能就是为什么将x_p用作FIND函数返回的第一组值的原因。但是,IMSHOW在y轴上显示图像数据的第一维,因此在这种情况下,FIND返回的第一值最终成为y坐标值



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 02:42


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.