如何使用opencv-python识别图像的形状是对称的还是不对称的?

我正在研究图像特征的提取,其中我试图确定某个图像是否对称。我正在使用 opecv - python 来开发这项工作。


下面的代码用于识别感兴趣区域的中心和直径。你怎么知道这个图像是否对称?


import cv2

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.offsetbox import AnchoredText


IMG = '015'

thresh = cv2.imread(IMD+'.png',0)

_, contours,hierarchy = cv2.findContours(thresh,2,1)

print (len(contours))

cnt = contours


for i in range (len(cnt)):

    (x,y),radius = cv2.minEnclosingCircle(cnt[i])

    center = (int(x),int(y))

    radius = int(radius)

    cv2.circle(thresh,center,radius,(0,255,0),2)

    print ('Circle: ' + str(i) + ' - Center: ' + str(center) + ' - Radius: ' + str(radius))

plt.text(x-21, y+15, '+', fontsize=25, color = 'red')

plt.text(10, -10, 'Centro: '+str(center), fontsize=11, color = 'red')

plt.text(340, -10, 'Diametro: '+str((radius*2)/100)+'mm', fontsize=11,     color = 'red')

plt.Circle((10, -10), 7.2, color='blue')

plt.imshow(thresh, cmap='gray')

#plt.savefig(IMG+'-diam.png')

plt.show()

出口:

http://img3.mukewang.com/611b7bef0001f1e506380544.jpg

在这种情况下,我想对我分析的点是否对称进行分类,下图,视觉上注意到它不对称,而上图的第一张图像是对称的。


http://img1.mukewang.com/611b7bf90001858e05980545.jpg

慕侠2389804
浏览 916回答 2
2回答

莫回无

这是我将如何解决这个问题:测量每个半径到中心的距离将测量值分成两组(0 到 180、180 到 360)获取两组的平均值并比较它们是否在误差范围内相等。将组的拆分旋转 1 度,然后再试一次,直到达到 179 度检查返回的任何拆分是否在边距内相等。您可能需要稍微调整一下相等边距才能找到一个可以接受的准确范围。此外,您可能需要法定人数检查旋转以查看 x 旋转在边距内是否相等,然后它是对称的。您可能还需要将其划分为象限而不是一半,等待您要检查对称性的轴数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python