2014-11-08 57 views
0

我想要的是在我选择的半径和中心的图像中添加一个圆,但是我不想使用绘图COMMAND,我想要一个新的输出数组,选择图像和圆圈。 这里是我的功能在matlab中交换一个图像中的圆圈像素

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 
+0

封闭的圈子或只是轮廓? – Divakar 2014-11-08 22:38:43

+0

只是一个大纲 – 2014-11-09 00:05:33

回答

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

+0

先生他们是没有'出'命令在matlab – 2014-11-09 00:23:19

+0

嗯,我有点懒惰,并用我的代码中'out'替换'out_image'。现在是正确的,也是初始化。 – Nemesis 2014-11-09 00:25:44

+0

也我似乎无法得到它的工作 – 2014-11-09 00:31:20