Comparación de momentos hu

Intenté comparar dos imágenes y usar el momento Hu para comparar el contorno extraído de estas imágenes: https://docs.google.com/file/d/0ByS6Z5WRz-h2WHEzNnJucDlRR2s/edit y https://docs.google.com/file/ d / 0ByS6Z5WRz-h2VnZyVWRRWEFva0k / edit La segunda imagen es igual a la primera, solo se gira y esperaba como resultado los mismos Humoments. Son un poco diferentes.

Humoments firman a la derecha (primera imagen):

[[ 6.82589151e-01] [ 2.06816713e-01] [ 1.09088295e-01] [ 5.30020870e-03] [ -5.85888607e-05] [ -6.85171823e-04] [ -1.13181280e-04]] 

Humoments firman a la derecha (segunda imagen):

 [[ 6.71793060e-01] [ 1.97521128e-01] [ 9.15619847e-02] [ 9.60179567e-03] [ -2.44655863e-04] [ -2.68791106e-03] [ -1.45592441e-04]] 

En este video: http://www.youtube.com/watch?v=O-hCEXi3ymU a los 4 minutos, observé que obtuvo exactamente lo mismo. Donde me equivoco

Aquí está mi código:

 nomeimg = "Sassatelli 1984 ruotato.jpg" #nomeimg = "Sassatelli 1984 n. 165 mod1.jpg" img = cv2.imread(nomeimg) gray = cv2.imread(nomeimg,0) ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV) element = cv2.getStructuringElement(cv2.MORPH_CROSS,(4,4)) imgbnbin = thresh imgbnbin = cv2.dilate(imgbnbin, element) #find contour contours,hierarchy=cv2.findContours(imgbnbin,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) #Elimination small contours Areacontours = list() area = cv2.contourArea(contours[i]) if (area > 90 ): Areacontours.append(contours[i]) contours = Areacontours print('found objects') print(len(contours)) #contorus[3] for sing in first image #contours[0] for sign in second image print("humoments") mom = cv2.moments(contours[0]) Humoments = cv2.HuMoments(mom) print(Humoments) 

Creo que tus números probablemente estén bien, las diferencias entre ellos son moderadamente pequeñas. Como dice el chico en el video, te vinculas a (alrededor de 3min):

Para obtener algunas respuestas significativas tomamos una transformación de registro

así que si hacemos -np.sign(a)*np.log10(np.abs(a)) en los datos que publique anteriormente, obtenemos:

Primera imagen:

 [[ 0.16584062] [ 0.68441437] [ 0.96222185] [ 2.27570703] [-4.23218495] [-3.16420051] [-3.9462254 ]] 

Segunda imagen:

 [[ 0.17276449] [ 0.70438644] [ 1.0382848 ] [ 2.01764754] [-3.61144437] [-2.57058511] [-3.83686117]] 

El hecho de que no sean idénticos es de esperar. Estás comenzando con imágenes rasterizadas que luego procesas bastante para obtener algunos de los contornos que pasas.

De los documentos opencv :

En el caso de imágenes rasterizadas, las invariantes de Hu calculadas para las imágenes originales y transformadas son un poco diferentes.