El problema es que el código frdescp
(utilicé this code, que debería ser el mismo que usted) también se escribe para centrar los descriptores de Fourier.
Si desea describir su forma de forma correcta, es obligatorio mantener algunos descriptores que sean simétricos con respecto al que representa el componente de CC.
la imagen siguiente se resume el concepto:
Con el fin de resolver su problema (y otros como el suyo), que escribió las siguientes dos funciones:
function descriptors = fourierdescriptor(boundary)
%I assume that the boundary is a N x 2 matrix
%Also, N must be an even number
np = size(boundary, 1);
s = boundary(:, 1) + i*boundary(:, 2);
descriptors = fft(s);
descriptors = [descriptors((1+(np/2)):end); descriptors(1:np/2)];
end
function significativedescriptors = getsignificativedescriptors(alldescriptors, num)
%num is the number of significative descriptors (in your example, is was 20)
%In the following, I assume that num and size(alldescriptors,1) are even numbers
dim = size(alldescriptors, 1);
if num >= dim
significativedescriptors = alldescriptors;
else
a = (dim/2 - num/2) + 1;
b = dim/2 + num/2;
significativedescriptors = alldescriptors(a : b);
end
end
sé, puede utilizar las funciones anteriores de la siguiente manera:
im = imread('test.jpg');
im = im2bw(im);
b = bwboundaries(im);
b = b{1};
%force the number of boundary points to be even
if mod(size(b,1), 2) ~= 0
b = [b; b(end, :)];
end
%define the number of significative descriptors I want to extract (it must be even)
numdescr = 20;
%Now, you can extract all fourier descriptors...
f = fourierdescriptor(b);
%...and get only the most significative:
f_sign = getsignificativedescriptors(f, numdescr);
de dónde sacaste frdescp? puede ser la fuente del problema – Rasman
Lo obtuve del procesamiento de imágenes digitales de Gonzaelz usando el libro de MATLAB, de hecho, ¡creo que el problema es bwboundaries! –
He editado [mi respuesta anterior] (http://stackoverflow.com/a/23741097/738017), espero que pueda ser útil para usted y otros usuarios. –