1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| %function fd = fourierdesc(img)
oimg=('c:\boum.jpg');
n=size(img)
b=I;
% edge detection robert gradien
a=double(I);
for x=2:n(1)-1
for y=2:n(2)-1
c=abs(a(x+1,y+1) - a(x,y))+ abs(a(x+1,y) - a(x,y+1)) ;
b(x,y)=c;
end
end
figure, imshow(b)
Title('roberts cross gradien result');
% count the fourier descriptor
I=im2bw(b);
cd=I
[rows cols] = find(I~=0)
% Find a starting point on the boundary
nf=input('input the boundary points :');
[rows cols] = find(I~=0);
contour = bwtraceboundary(I, [rows(1), cols(1)], 'N');
% complex number format (x + jy)
sampleFactor = length(contour)/nf;
dist = 1;
for i=1:nf
c(i) = contour(round(dist),2) + j*contour(round(dist),1);
dist = dist + sampleFactor;
end
C = fft(c)
Capprox = C;
% Take inverse fft
cifft = ifft(Capprox);
% Show original boundary and approximated boundary
figure
imshow(imcomplement(bwperim(I)));
title('image result');
hold on, plot(cifft,'r'); |
Partager