Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我在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! 您还可以调整绘图标记的其他这些属性: MarkerEdgeColor , MarkerFaceColor , MarkerSize 。 如果随后要保存新图像并在其上绘制标记,则可以查看这个答案,我回答了一个有关从图形保存图像时保持图像尺寸的问题。 注意:使用IMSHOW (或IMAGE等)绘制图像数据时,对行和列的常规解释实际上会发生翻转。通常,数据的第一维(即行)被认为是x轴上的数据,这可能就是为什么将x_p用作FIND函数返回的第一组值的原因。但是,IMSHOW在y轴上显示图像数据的第一维,因此在这种情况下,FIND返回的第一值最终成为y坐标值 。 更多&回答... |
![]() |
![]() |