在matlab中交换图像中的圆形像素

时间:2014-11-08 22:36:21

标签: arrays image matlab geometry

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

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

其中in_image是输入图像 x0 y0圆心,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

1 个答案:

答案 0 :(得分:0)

我非常确定有更好的方法,但按照您的方法,您可以使用以下代码:

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个像素),这对于大型图片来说可能不够。见下面的例子。此外,对于大图片,您可能需要更精细的discritization,即ang中的更多元素。 enter image description here

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

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

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

该功能的完整代码是:

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作为灰度值。