【问题标题】:exchange circle pixels in an image in matlab在matlab中交换图像中的圆形像素
【发布时间】:2014-11-08 22:36:20
【问题描述】:

我只想在我选择的半径和中心的图像中添加一个圆,但是我不想使用绘图命令,我想要一个新的输出数组,上面有我选择的图像和圆。 这是我的功能

function [ out_image ] = draw_circle( in_image,x0,y0,r,value)

in_image 是输入图像 x0 y0 he 圆心 r 半径 重视图像的强度

这是我失败的尝试

ang=0:pi/100:2*pi
x=r*cos(ang)+x0;
y=r*sin(ang)+y0;
cir=[x,y];
[j,k]=size(cir);
for cir=1:j
    for cir=1:k     
if cir(i,j)==0
out_image(i,j)=in_image(i,j);
end
end
end

imshow(out_image)

end

【问题讨论】:

  • 封闭的圆圈还是轮廓?

标签: arrays image matlab geometry


【解决方案1】:

我很确定有更好的方法,但是按照您的方法,您可能会使用以下代码:

out_image = in_image;
cir = round([r*cos(ang)+x0;r*sin(ang)+y0]);
for i = 1:size(cir,2)
    out_image(cir(1,i),cir(2,i),:) = 255;
end

你的 for 循环不像你写的那样工作。此外,您应该使用 round 来获取索引,而不是浮点值。但是,圆圈​​很小(只有 1 个像素),对于大图片来说可能不够。请参见下面的示例。此外,您可能需要对大图片进行更精细的区分,即ang 中的更多元素。

如果你想要更大的线宽,你可以使用

lw = 3; % Enter linewidth here
for i = 1:size(cir,2)
    out_image(cir(1,i)+(-lw:lw),cir(2,i)+(-lw:lw),:) = 255;
end

编辑:如果你没有看到它。圆圈靠近左上角。

函数的完整代码为:

function [ out_image ] = draw_circle( in_image,x0,y0,r,value,lw)

out_image = in_image;
ang = 0:pi/100:2*pi;
cir = round([r*cos(ang)+x0;r*sin(ang)+y0]);
for i = 1:size(cir,2)
    out_image(cir(1,i)+(-lw:lw),cir(2,i)+(-lw:lw),:) = value;
end
imshow(out_image)

你可以从命令行调用它

draw_circle(in_image,100,200,50,0,3);

注意,我把未使用的value作为灰度值。

【讨论】:

  • 好吧,我有点懒惰,在我的代码中用out 替换了out_image。现在是正确的,初始化也是如此。
  • ang=0:pi/100:2*pi; x=rcos(ang)+x0; y=rsin(ang)+y0; cir=round([rcos(ang)+x0;rsin(ang)+y0]);对于 cir=i=1:size(cir,2); out_image(cir(1,i),cir(2,i),:)=255;结束
  • for 循环不正确。您使用for cir=i=1:size(cir,2);,但在我的代码中它是for i=1:size(cir,2)。此外,您可以删除 x=...y=...。我上传了完整的代码。你可以复制它。
  • 先生非常感谢您,您帮了我很多,您是一个选择分享知识的好人。
猜你喜欢
  • 2013-12-22
  • 1970-01-01
  • 2017-08-05
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
相关资源
最近更新 更多