Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

were to introduce hold on command

Asked by FIR on 10 Jan 2013
I  have a image in which i have to draw a circle over it,i have to draw circles in many places in the image ,please tell how to procees,i saw a code in matlab central it draws only one circle ,but how to draw many circles on a image manually ,i have to click on image and have to draw circle
http://www.mathworks.com/matlabcentral/fileexchange/23121-circle-on-image
i edited from above link but the thing is that i have to draw many circle on one image ,please tell where i have to write hold on command  
code
where k is my image 
function [] = circle_saptha(k)
ok = 0;
while ok~=1
    % figure;
      imshow(k);
      pt = ginput(2)
      x1 = pt(1,1);
      y1 = pt(1,2);
      x2 = pt(2,1);
      y2 = pt(2,2);
      xpt = [x1 x2];
      ypt = [y1 y2];
      %line(x,y); % Enablw this for draw rectangle on circle
      r = sqrt((x2-x1)^2 + (y2-y1)^2)
      pp=rsmak('circle',r,[x1 y1]);
      % figure;
      % imshow(k)
      fnplt(pp);
      line(xpt,ypt);
      xtl = x1-r;
      xtr = x1+r;
      xbl = x1-r;
      xbr = x1+r;
      ytl = y1+r;
      ytr = y1+r;
      ybl = y1-r;
      ybr = y1-r;
      x = [xtl xtr xbr xbl xtl];
      y = [ytl ytr ybr ybl ytl];
      %line(x,y);
      for i=1:size(k,1)
          for j=1:size(k,2)
              x2 = j;
              y2 = i;
              val = floor(sqrt((x2-x1)^2 + (y2-y1)^2));
              if(val == floor(r))
                  nim(i,j,1) = 255;
                  nim(i,j,2) = 0;
                  nim(i,j,3) = 0;
              else
                  nim(i,j,1) = k(i,j,1);
                  nim(i,j,2) = k(i,j,2);
                  nim(i,j,3) = k(i,j,3);
              end
          end
      end
      imshow(nim);
      ok = (menu('Do u want to draw another circle?','No','Yes')==1)
      imshow(nim);
  end
  end

0 Comments

FIR

Tags

Products

No products are associated with this question.

2 Answers

Answer by Teja Muppirala on 11 Jan 2013
Accepted answer

You keep overwriting "nim" with the same original "k". You can fix it easily:

Step 1. Change these lines:

ok = 0;
while ok~=1
    % figure;
      imshow(k);

to this:

ok = 0;
nim = k;
while ok~=1
    % figure;
      imshow(nim);

Step 2. Delete these three lines:

   nim(i,j,1) = k(i,j,1);
   nim(i,j,2) = k(i,j,2);
   nim(i,j,3) = k(i,j,3);

2 Comments

FIR on 11 Jan 2013

same error

Teja Muppirala on 11 Jan 2013

Are you sure? Run this:

k = imread('peppers.png');
ok = 0;
nim = k;
while ok~=1
    % figure;
    imshow(nim);
    pt = ginput(2)
    x1 = pt(1,1);
    y1 = pt(1,2);
    x2 = pt(2,1);
    y2 = pt(2,2);
    xpt = [x1 x2];
    ypt = [y1 y2];
    %line(x,y); % Enablw this for draw rectangle on circle
    r = sqrt((x2-x1)^2 + (y2-y1)^2)
    %line(x,y);
    for i=1:size(k,1)
        for j=1:size(k,2)
            x2 = j;
            y2 = i;
            val = floor(sqrt((x2-x1)^2 + (y2-y1)^2));
            if(val == floor(r))
                nim(i,j,1) = 255;
                nim(i,j,2) = 0;
                nim(i,j,3) = 0;
            else
              end
          end
      end
      imshow(nim);      ok = (menu('Do u want to draw another circle?','No','Yes')==1)
      imshow(nim);
  end
Teja Muppirala
Answer by Jan Simon on 10 Jan 2013
Edited by Jan Simon on 10 Jan 2013

A simplified version:

while ok~=1
  imshow(k);
  nim = <modified k>
  imshow(nim);
  ok = (menu('Do u want to draw another circle?','No','Yes') == 1);
  imshow(nim);
end

Now nim is overwritten each time based on k. Perhaps you want:

nim = k;
while ok~=1
  nim = <modified nim>
  imshow(nim);
  ok = (menu('Do u want to draw another circle?','No','Yes') == 1);
end

4 Comments

Jan Simon on 10 Jan 2013

"nim = nim"?! Does "codes above" mean that you insert this again:

if(val == floor(r))
  nim(i,j,1) = 255;
  nim(i,j,2) = 0;
  nim(i,j,3) = 0;
else
  nim(i,j,1) = k(i,j,1);
  nim(i,j,2) = k(i,j,2);
  nim(i,j,3) = k(i,j,3);
end

Then nim is still filled with the values of the original k.

Please note, that I neither have understood, what you want to achieve, nor which problem occurs. I still do not know, what "the same problem" is. So please explain this short and clear: What happens and what do you want?

FIR on 11 Jan 2013

The code above draws circle on imagaes one by one,i want to draw many circles on same image

Jan Simon on 11 Jan 2013

Then you should not insert the values of "k" in each iteration, but keep the values of "nim".

Jan Simon

Contact us