用机器学习图像匹配

简介: 用机器学习图像匹配


差分矩阵求和图像匹配

图像的匹配时基于像素的并比较和计算来实现的方法。将图像中的切片在原图中进行匹配,并标注出来。使用差分算法,它的核心在于差分矩阵,实质为差异矩阵,计算公式如下:

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

算法的过程是首先计算两个矩阵数据之间差异分析图像的相似性;然后,设置一个阈值进行比较,如果差分矩阵的所有元素在阈值以内,则表示这两张图像是相似的,且描述了同一个物体。另外,它要求两个图像的大小相同。

编程实现算法的思路是,将切片图在原图中进移动,并计算两个图像的差分矩阵,如果差分矩阵的所有元素之和小于1,则认为找到了切片图在图像中的位置。

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]
    find = None
    for now_h in  range(0,h-fh):
        for now_w in range(0,w-fw):
            comp_tz = myimg[now_h:now_h+fh,now_w:now_w+fw,:]-myimg1
            if np.sum(comp_tz)<1:
                find  = now_w, now_h
    if find != None:
        cv2.rectangle(myimg, find, (find[0]+fw,find[1]+fh),(255,0,0))
    return img

         
fn1 = 'picturetest.png'
fn2 = 'plane.png'
myimg = cv2.imread(fn1)
myimg1 = cv2.imread(fn2)
myimg = showpiclocation(myimg, myimg1)
cv2.namedWindow('img')
cv2.imshow('img',myimg)
cv2.waitKey(2000)
cv2.destroyAllWindows()

实验结果如下:

差分矩阵均值进行图像匹配

当数字图像质量较差时,需要计算差分矩阵的均值,并为均值设一个适当的阈值。在目标图中加上少量(50000个)不同颜色的噪声点,从而测试算法在弱噪声环境下的有效性。因为图像质量不高,存在很多噪声点,所以要将差分矩阵均值的阈值设置得稍大一点,这里设为20。通常阈值为10~200,阈值越大,能容忍的噪声越多。

# 少量噪声定位图像
# 随机的位置,随机的像素值
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]
    find = None
    for now_h in range(0,h-fh):
        for now_w in range(0,w-fw):
            comp_tz = myimg[now_h:now_h+fh,now_w:now_w+fw,:]-myimg1
            if abs(np.mean(comp_tz))<10:
                find  = now_w, now_h
                print('ok')
        print('.')
    if find != None:
        cv2.rectangle(myimg, find, (find[0]+fw,find[1]+fh),(0,0,255))
    return img
def addnoise(img, cont):
    for k in range(0, cont):
        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 = 'picturetest.png'
fn1 = 'plane.png'
myimg = cv2.imread(fn)
myimg1 = cv2.imread(fn1)
addnoise(myimg,5000)
myimg = showpiclocation(myimg,myimg1)
cv2.namedWindow('img')
cv2.imshow('img',myimg)
cv2.waitKey(2000)
cv2.destroyAllWindows()

结果如下:

用欧式距离进行图像匹配结果

对强噪声环境下的图像进行匹配时,欧式距离匹配方法相对于以上两种方法的会有更好的效果。

首先在目标图像中加上更多的(500000个)不同颜色的噪声点。

核心算法为:设图像矩阵有n个元素,用n个元素值(x1,x2,…,xn)组成该图像的特征组,特征组形成了n维空间,特征组中的特征码构成每一维的数值。在n维空间下,两个图像矩阵各形成了一个点,然后计算这两个点之间的距离,距离最小者为最匹配的图像。

# 少量噪声定位图像
# 随机的位置,随机的像素值
import cv2
import numpy as np
print('loading……')
def get_EuclideanDistance(x,y):
    myx = np.array(x)
    myy = np.array(y)
    return np.sqrt(np.sum((myx-myy)**2))
def findpic(img, findimg, h, fh, w, fw):
    minds = 1e8
    mincb_h = 0
    mincb_w = 0
    my_findimg = findimg
    for now_h in range(0, h-fh):
        for now_w in range(0, w-fw):
            my_img = img[now_h:now_h+fh,now_w:now_w+fw,:]
            dis = get_EuclideanDistance(my_img, my_findimg)
            if dis < minds:
                mincb_h = now_h
                mincb_w = now_w
                minds = dis # 更新最小距离
                print('.')
    find = mincb_w, mincb_h
    cv2.rectangle(img, find, (find[0]+fw, find[1]+fh), (0,0,255))
    return img
def showpiclocation(img,findimg):
    # 定位图像
    w = img.shape[1]
    h = img.shape[0]
    fw = findimg.shape[1]
    fh = findimg.shape[0]
    return findpic(img,findimg,h,fh,w,fw)
def addnoise(img, cont):
    for k in range(0, cont):
        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 = 'picturetest.png'
fn1 = 'plane.png'
myimg = cv2.imread(fn)
myimg1 = cv2.imread(fn1)
addnoise(myimg,500000)
myimg = showpiclocation(myimg,myimg1)
cv2.namedWindow('img')
cv2.imshow('img',myimg)
cv2.waitKey(2000)
cv2.destroyAllWindows()

结果如下:

相关文章
|
4月前
|
机器学习/深度学习 算法 数据可视化
JAMA | 机器学习中的可解释性:SHAP分析图像复刻与解读
JAMA | 机器学习中的可解释性:SHAP分析图像复刻与解读
1175 1
|
10月前
|
机器学习/深度学习 人工智能 算法
机器学习笔试面试之图像数据不足时的处理方法、检验方法、不均衡样本集的重采样
机器学习笔试面试之图像数据不足时的处理方法、检验方法、不均衡样本集的重采样
140 0
|
4月前
|
人工智能 编解码 算法
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
在本教程中,您将学习在阿里云交互式建模平台PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理,实现文本驱动的图像编辑功能单卡即可完成AIGC图片风格变化、背景变化和主体变化等功能。让我们一同开启这场旅程,为您的图像编辑添上无限可能性的翅膀吧。
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【CVPR2024】阿里云人工智能平台PAI图像编辑算法论文入选CVPR2024
近期,阿里云人工智能平台PAI发表的图像编辑算法论文在CVPR-2024上正式亮相发表。论文成果是阿里云与华南理工大学贾奎教授领衔的团队共同研发。此次入选标志着阿里云人工智能平台PAI自主研发的图像编辑算法达到了先进水平,赢得了国际学术界的认可。在阿里云人工智能平台PAI算法团队和华南理工大学的老师学生们一同的坚持和热情下,将阿里云在图像生成与编辑领域的先进理念得以通过学术论文和会议的形式,向业界传递和展现。
|
3月前
|
机器学习/深度学习 计算机视觉
【机器学习】LoFTR:革命性图像特征批评技术等领跑者
【机器学习】LoFTR:革命性图像特征批评技术等领跑者
62 1
|
3月前
|
机器学习/深度学习 算法
【机器学习】剪贴画图像等文本引导运动生成技术革新
【机器学习】剪贴画图像等文本引导运动生成技术革新
38 1
|
3月前
|
机器学习/深度学习 自然语言处理 计算机视觉
【机器学习】HQ-Edit引领图像编辑新潮流
【机器学习】HQ-Edit引领图像编辑新潮流
42 1
|
2月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
3月前
|
机器学习/深度学习 算法 数据挖掘
机器学习之聚类——MeanShift算法和图像矢量量化
机器学习之聚类——MeanShift算法和图像矢量量化
32 0