图像匹配---(Python)

图像匹配---(Python)

图像匹配分为以灰度为基础的匹配和以特征为基础的匹配:

  • (1)灰度匹配是基于像素的匹配。灰度匹配通过利用某种相似性度量,如相关函数、协方差函数、差平方和、差绝对值和等测度极值,判定两幅图像中的对应关系。 
  • (2)特征匹配则是基于区域的匹配。基于特征的匹配所处理的图像一般包含的特征有颜色特征、纹理特征、形状特征、空间位置特征等

1、差分矩阵求和

差分矩阵=图像A矩阵数据-图像B矩阵数据


实例代码:

#简单定位图片
import cv2
import numpy as np
 
print 'loading  ...'
def showpiclocation(img,findimg):	#定义定位函数
    #定位图片
    w=img.shape[1]   #返回img的第二维度长度---宽度
    h=img.shape[0]  	 #返回img的第一维度长度---高度
    fw=findimg.shape[1]
    fh=findimg.shape[0]
    findpt=None
    for now_h in xrange(0,h-fh):
        for now_w in xrange(0,w-fw):
            comp_tz=img[now_h:now_h+fh,now_w:now_w+fw,:]-findimg       
            if np.sum(comp_tz)<1:              
                findpt=now_w,now_h
        print ".",
    if  findpt!=None:
        cv2.rectangle(img, findpt, (findpt[0]+fw,findpt[1]+fh),(0,0,255))	#opencv函数画矩形
    return img
fn='pictest.png'
fn1='pictestt1.png'
fn2='pictestt2.png'
myimg=cv2.imread(fn)
myimg1=cv2.imread(fn1)
myimg2=cv2.imread(fn2)
myimg=showpiclocation(myimg,myimg1)
myimg=showpiclocation(myimg,myimg2)
cv2.namedWindow('img')       
cv2.imshow('img', myimg)   
cv2.waitKey()  
cv2.destroyAllWindows() 


运行结果
图像匹配---(Python)_第1张图片  图像匹配---(Python)_第2张图片

图像匹配---(Python)_第3张图片


2、差分矩阵均值

示例代码:

#少量噪声定位图片
import cv2
import numpy as np

print 'loading  ...'

def showpiclocation(img,findimg):
    #定位图片
    w=img.shape[1]  
    h=img.shape[0]  
    fw=findimg.shape[1]
    fh=findimg.shape[0]
    findpt=None
    for now_h in xrange(0,h-fh):
        for now_w in xrange(0,w-fw):
            comp_tz=img[now_h:now_h+fh,now_w:now_w+fw,:]-findimg       
            if abs(np.mean(comp_tz))<20:              
                findpt=now_w,now_h
                print "ok"
        print ".",
    if  findpt!=None:
        cv2.rectangle(img, findpt, (findpt[0]+fw,findpt[1]+fh),(0,0,255))
    return img


def addnoise(img):      #为图像添加噪声
    coutn=50000
    for k in xrange(0,coutn):  
        xi = int(np.random.uniform(0,img.shape[1]))  
        xj = int(np.random.uniform(0,img.shape[0]))  
        img[xj,xi,0]= 255 *np.random.rand() 
        img[xj,xi,1]= 255 *np.random.rand()   
        img[xj,xi,2]= 255 *np.random.rand() 

fn='pictest.png'
fn1='pictestt1.png'

myimg=cv2.imread(fn)
myimg1=cv2.imread(fn1)

addnoise(myimg)         		  #添加噪声
myimg=showpiclocation(myimg,myimg1)     #图像定位

cv2.namedWindow('img')       
cv2.imshow('img', myimg)   
cv2.waitKey()  
cv2.destroyAllWindows() 

运行结果

图像匹配---(Python)_第4张图片

你可能感兴趣的:(Python图像处理)