The purpose of this example is to detect a circle of known radius from a binary image as follow:

Do note that I am using the latest SCILAB 5.1, and SIVP toolbos 0.5.0. as descripted in my previous post.

Do note that I am using the latest SCILAB 5.1, and SIVP toolbos 0.5.0. as descripted in my previous post.

For image processing functionalities, the sip tooblox http://siptoolbox.sourceforge.net/ provides more functions, however, for this moment, I am still waiting for the binary version for latest SCILAB for WINDOWS. (please find the http://scilab-imageprocessing.blogspot.com/2009/03/requirement-for-examples-scilab-and.html for the steps of installation)

OK, enought talking, here comes the example:

**1. Reading image and the convert to binary image.**

I = imread('aaa.png');

I =im2bw(double(I),0.5);

[y,x]=find(I);

[y,x]=find(I);

[sy,sx]=size(I);

imshow(I);

**2. Find all the require information for the transformatin. the 'totalpix' is the numbers of '1' in the image.**

totalpix = length(x);

**3. Preallocate memory for the Hough Matrix. Try to play around with the R, or the radius to see the different results.**

HM = zeros(sy,sx);

R = 34;

R2 = R^2;

**4. Performing Hough Transform. Notice the accumulator is located in the inner for loop. This portion of codes will map the original image to the a-b domain.**

b = 1:sy;

for cnt = 1:totalpix

a = (round(x(cnt) - sqrt(R2 - (y(cnt) - [1:sy]).^2)));

for cnt2 =1:sy

if isreal(a(cnt2),0) & real(a(cnt2))>0

HM(cnt2,real(a(cnt2))) = HM(cnt2,real(a(cnt2))) + 1;

end

end

end

**5. Showing the Hough Matrix**

imshow(HM); // in binary image

imshow(HM,[]); // in intensity image, so you could notice the max value of Hough Transform

**6. Finding the location of the circle with radius of R**

[maxval, maxind] = max(max(HM));

[B,A] = find(HM==maxval);

imshow(double(I));

mtlb_hold on;

plot(mean(A),sy-mean(B),'rx');