7

2 つの画像を比較し、Hu モーメントを使用してこれらの画像から抽出された輪郭を比較しようとしました: https://docs.google.com/file/d/0ByS6Z5WRz-h2WHEzNnJucDlRR2s/editおよびhttps://docs.google.com/file/ d/0ByS6Z5WRz-h2VnZyVWRRWEFva0k/edit 2 番目の画像は最初の画像と同じですが、回転しただけで、結果として同じ Humoments と予想されます。それらは少し異なります。

右側の Humoments サイン (最初の画像):

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

右側の Humoments サイン (2 番目の画像):

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

このビデオでは: http://www.youtube.com/watch?v=O-hCEXi3ymU 4分目に彼がまったく同じものを手に入れるのを見ました. どこが間違っていますか?

これが私のコードです:

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)
4

1 に答える 1

15

あなたの数字はおそらく大丈夫だと思います。それらの違いは適度に小さいです。リンク先のビデオで男が言っているように(約3分):

意味のある答えを得るために、対数変換を行います

したがって、-np.sign(a)*np.log10(np.abs(a))上記で投稿したデータを処理すると、次のようになります。

最初の画像:

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

2 番目の画像:

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

それらが同一ではないという事実は予想されます。ラスター化された画像から始めて、それをかなり多く処理して、渡す輪郭の一部を取得します。

opencv ドキュメントから:

ラスター イメージの場合、元のイメージと変換されたイメージの計算された Hu 不変量は少し異なります。

于 2013-01-24T12:29:33.270 に答える