我这里有两个图形,我想比较二者的相似程度,有什么方法比较好呢。 我想到的是将两个图像中心点对齐,然后使用halcon算子abs_diff_image将二者相减,计算剩余部分面积大小来反映二者相似度,但是感觉不太好用。
以下是二者图片:
zoom_image_size (Image, ImageZoom, 9, 8, 'constant')
rgb1_to_gray (ImageZoom, GrayImage)
gen_rectangle1 (ROI_0, -0.490025, -0.495253, 7.45012, 8.47627)
intensity (ROI_0, GrayImage, Mean, Deviation)
get_image_size (GrayImage, Width, Height)
hash:=[]
for i := 0 to Height-1 by 1
for j := 0 to Width-1 by 1
get_grayval (GrayImage, i, j, Grayval1)
if ((j+1)==9)
Grayval2:=-1
else
get_grayval (GrayImage, i, j+1, Grayval2)
endif
if (Grayval1>Grayval2)
hash:=[hash,1]
else
hash:=[hash,0]
endif
endfor
endfor
dhash:=hash
这段是我对差值哈希算法在halcon中的实现 我开始用三张风景图像做测试,
我发现有海滩的照片和蓝色大海的相似度与山峰的相似度居然差不多2333
下面是代码的结构,读取图片,计算哈希值,两图片哈希值比较
read_image (Grz5ammdrtSmall, './grz5Ammdrt_small.jpg')
Get_DHash (Grz5ammdrtSmall, dhash1)
read_image (Grz5ammdrtSmall2, './OIP-C.jpg')
Get_DHash (Grz5ammdrtSmall2, dhash2)
if (|dhash2|!=0 and |dhash1|!=0)
n:=0
endif
for i := 0 to |dhash1|-1 by 1
if (dhash1[i]!=dhash2[i])
n:=n+1
endif
endfor
我找到了另一个匹配图像相似度的方法,针对于我上面的黑底白色图像。 就是Jaccard距离算法,大致步骤是 将两张图的目标区域取出来,做并集,做交集,然后通过并集面积/交集面积的方式的到一个值,这个值是Jaccard距离. 这个值最大也就是相似度最高时1.0。 用此来判断两个区域的相似度。
我看到一种图片相似度方法是差值哈希算法,将图像缩放到8X9大小,然后转灰度图,根据缩放后图像像素值大于后一个像素值记作1,相反记作0。形成64位的一个数,这个数被叫做指纹,比较两个图像的指纹,计算汉明距离。 不知道这种方法实不实用。 我用起来感觉区分我这两种图的相似度没那么好用。
– xiaozhuBJZ 4周前我找到了另一个匹配图像相似度的方法,针对于我上面的黑底白色图像。 就是Jaccard距离算法,大致步骤是 将两张图的目标区域取出来,做并集,做交集,然后通过并集面积/交集面积的方式的到一个值,这个值是Jaccard距离. 这个值最大也就是相似度最高时1.0。 用此来判断两个区域的相似度。
– xiaozhuBJZ 2周前