Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenCV图像处理之基于积分图实现NCC快速相似度匹配

OpenCV图像处理之基于积分图实现NCC快速相似度匹配

作者头像
OpenCV学堂
发布于 2018-10-23 02:56:26
发布于 2018-10-23 02:56:26
7.6K10
代码可运行
举报
运行总次数:0
代码可运行

微信公众号:OpenCV学堂 关注获取更多计算机视觉深度学习知识 觉得文章对你有用,请戳底部广告支持

NCC概述

基于Normalized cross correlation(NCC)用来比较两幅图像的相似程度已经是一个常见的图像处理手段。在工业生产环节检测、监控领域对对象检测与识别均有应用。NCC算法可以有效降低光照对图像比较结果的影响。而且NCC最终结果在-1到1之间,所以特别容易量化比较结果,只要给出一个阈值就可以判断结果的好与坏。

NCC数学知识

们也可以通过各自的积分图计算预先得到。这样就完成了整个预计算生成。依靠索引表查找计算结果,NCC就可以实现线性时间的复杂度计算,而且时间消耗近似常量跟窗口半径大小无关,完全可以满足实时对象检测工业环境工作条件。

算法步骤

为了减小计算量,我们首先要把输入的图像转换为灰度图像,在灰度图像的基础上完成整个NCC计算检测。

  1. 把彩色图像转换为灰度图像
  2. 预计算模板图像和目标图像的积分图
  3. 根据输入的窗口半径大小使用积分图完成NCC计算
  4. 根据阈值得到匹配或者不匹配区域。
  5. 输出结果

检测结果:

标准合格电路板作为参照模板:

被污染的电路版

检测结果:

由于是项目代码不好公开,所以给大家演示一下OpenCV中利用积分图实现图像模糊的简单代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2 as cv
import numpy as np


def get_block_sum(ii, x1, y1, x2, y2, index):
    tl = ii[y1, x1][index]
    tr = ii[y2, x1][index]
    bl = ii[y1, x2][index]
    br = ii[y2, x2][index]
    s = (br - bl - tr + tl)
    return s


def blur_demo(image, ii):
    h, w, dims = image.shape
    result = np.zeros(image.shape, image.dtype)
    ksize = 15
    radius = ksize // 2
    for row in range(0, h + radius, 1):
        y2 = h if (row + 1)> h else (row + 1)
        y1 = 0 if (row - ksize) < 0 else (row - ksize)
        for col in range(0, w + radius, 1):
            x2 = w if (col + 1)>w else (col + 1)
            x1 = 0 if (col - ksize) < 0 else (col - ksize)
            cx = 0 if (col - radius) < 0 else (col - radius)
            cy = 0 if (row - radius) < 0 else (row - radius)
            num = (x2 - x1)*(y2 - y1)
            for i in range(0, 3, 1):
                s = get_block_sum(ii, x1, y1, x2, y2, i)
                result[cy, cx][i] = s // num

    cv.imshow("integral fast blur", result)
    cv.imwrite("D:/result.png", result)


src = cv.imread("D:/images/test1.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
sum_table = cv.integral(src, sdepth=cv.CV_32S)
blur_demo(src, sum_table)

cv.waitKey(0)
cv.destroyAllWindows()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
代码牛头不对马嘴,这文章是抄袭csdn上的吧,人家用java,你用python复现一下也对的起稿费啊
代码牛头不对马嘴,这文章是抄袭csdn上的吧,人家用java,你用python复现一下也对的起稿费啊
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
OpenCV中积分图介绍与应用
OpenCV中积分图函数与应用 一:图像积分图概念 积分图像是Crow在1984年首次提出,是为了在多尺度透视投影中提高渲染速度。随后这种技术被应用到基于NCC的快速匹配、对象检测和SURF变换中、基于统计学的快速滤波器等方面。积分图像是一种在图像中快速计算矩形区域和的方法,这种算法主要优点是一旦积分图像首先被计算出来我们可以计算图像中任意大小矩形区域的和而且是在常量时间内。这样在图像模糊、边缘提取、对象检测的时候极大降低计算量、提高计算速度。第一个应用积分图像技术的应用是在Viola-Jones的对象检
OpenCV学堂
2018/04/04
2.9K0
OpenCV中积分图介绍与应用
13行代码实现最快速最高效的积分图像算法。
本文介绍了基于积分图像的计算机图像处理技术,包括其基本概念、操作步骤和应用场景。通过积分图像,可以方便地进行图像的局部特征提取和图像处理,包括图像滤波、边缘检测、图像分割和特征提取等。同时,本文还介绍了一些常用的积分图像处理算法,包括卷积、高斯滤波、Canny边缘检测和霍夫变换等。这些算法在计算机视觉和图像处理领域都有广泛的应用,对于图像处理的效果和性能有着重要的影响。
用户1138785
2018/01/03
1.8K0
13行代码实现最快速最高效的积分图像算法。
OpenCV之图像积分图算法
python代码: import cv2 as cv import numpy as np def get_block_sum(ii, x1, y1, x2, y2, index): tl = ii[y1, x1][index] tr = ii[y2, x1][index] bl = ii[y1, x2][index] br = ii[y2, x2][index] s = (br - bl - tr + tl) return s def blur_de
MachineLP
2021/07/23
2810
Python opencv图像处理基础总结(六) 直线检测 圆检测 轮廓发现
我还有改变的可能性 一想起这一点 我就心潮澎湃 文章目录 一、直线检测 使用霍夫直线变换做直线检测,前提条件:边缘检测已经完成 # 标准霍夫线变换 cv2.HoughLines(image, rho, theta, threshold, lines=None, srn=None, stn=None, min_theta=None, max_theta=None) image:经过边缘检测的输出图像,8位,单通道二进制源图像 rho:距离步长 theta:角度步长 threshold:阈值,只有
叶庭云
2020/09/17
8.6K0
Python opencv图像处理基础总结(六) 直线检测 圆检测 轮廓发现
我只用半小时 | Python手写了个图像模板匹配算法
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 OpenCV中的模板匹配 OpenCV中的模板匹配是支持基于NCC相似度查找的,但是不是很好用,一个主要的原因是查找最大阈值,只能匹配一个,自己比对阈值,又导致无法正确设定阈值范围,所以问题很多。于是我重新写了纯Python版本的NCC图像模板匹配的代码实现了一个Python版本的,简单易用,支持多尺度,跟多进程并行! 主要思想 主要是基于NCC实现的像素相似度计算,这个OpenCV官方的模板匹配也有这中方式像素相似度
OpenCV学堂
2022/05/12
1.4K0
我只用半小时 | Python手写了个图像模板匹配算法
基于积分图的二值图像膨胀算法实现
积分图来源与发展 积分图是Crow在1984年首次提出,是为了在多尺度透视投影中提高渲染速度。随后这种技术被应用到基于NCC的快速匹配、对象检测和SURF变换中、基于统计学的快速滤波器等方面。积分图是一种在图像中快速计算矩形区域和的方法,这种算法主要优点是一旦积分图首先被计算出来我们可以计算图像中任意大小矩形区域的和而且是在常量时间内。这样在图像模糊、边缘提取、对象检测的时候极大降低计算量、提高计算速度。第一个应用积分图像技术的应用是在Viola-Jones的对象检测框架中出现。 积分图概念 在积分图(In
OpenCV学堂
2018/04/04
1.8K0
基于积分图的二值图像膨胀算法实现
C++ OpenCV特征提取之积分图计算
积分图像的定义:取图像左上侧的全部像素计算累加和,并用这个累加和替换图像中的每一个像素,使用这种方式得到的图像称为积分图像。
Vaccae
2019/07/24
1.3K0
基于OpenCV的实时车道检测
自动驾驶汽车是人工智能领域最具颠覆性的创新之一。它们借助深度学习算法不断推动社会发展,并在移动领域创造新的机遇。自动驾驶汽车可以去任何传统汽车可以去的地方,也能像经验丰富的人类驾驶员一样完成各种操作。但是,正确的训练是非常重要的。在自动驾驶汽车的训练过程中,车道检测是其中的一个重要步骤,也是最初要完成的步骤。今天,我们将学习如何使用视频进行车道检测。
一点人工一点智能
2023/08/21
9730
基于OpenCV的实时车道检测
Street Lanes Finder - 检测自动驾驶汽车的车道
在今天的文章中,将使用基本的计算机视觉技术来解决对于自动驾驶汽车至关重要的街道车道检测问题。到本文结束时,将能够使用Python和OpenCV执行实时通道检测。
代码医生工作室
2019/08/01
7610
Street Lanes Finder - 检测自动驾驶汽车的车道
python进阶——自动驾驶寻找车道
1.若不知道怎么安装opencv或者使用的请看我的这篇文章(曾上过csdn综合热榜的top1):
淼学派对
2023/10/14
4860
python进阶——自动驾驶寻找车道
OpenCV 图像分析之 —— 积分图
$$ \operatorname{sum}_{\text {square }}(x, y)=\sum_{y^{\prime}倾斜求和
为为为什么
2022/08/09
1.7K0
OpenCV 图像分析之 —— 积分图
Python OpenCV 霍夫(Hough Transform)直线变换检测应用
在 OpenCV 中提供了两个霍夫直线检测的函数,一个是标准霍夫变换,另一个是概率霍夫变换。
玖柒的小窝
2021/09/20
2K0
Python OpenCV 霍夫(Hough Transform)直线变换检测应用
【OpenCV】入门教学/了解图像处理的基本原理
本文是基于哔哩哔哩OpenCV入门课程的内容加上我个人的理解而来。 本篇文章的主要内容: 阅读本篇文章,你需要具备python的基本语法的学习。如果你并没有学习过python,可以去看我的python专栏:python
Yui_
2025/02/03
2460
【OpenCV】入门教学/了解图像处理的基本原理
OpenCV图像处理专栏十九 | 手动实现基于Canny算子的边缘检测
接着昨天手动构造Sobel算子实现检测,今天来讲讲如何手动实现Canny边缘检测。由于要实现这个算法的需要的先验知识比较多,所以在学习这个算法的实现之前我们先来学习一下用于图像二值化的OSTU大津法。
BBuf
2020/03/19
1.5K0
OpenCV与图像处理(五)
以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行。
Must
2020/07/28
7260
OpenCV与图像处理(五)
Wellner 自适应阈值二值化算法
参考文档: Adaptive Thresholding for the DigitalDesk.pdf
用户1138785
2019/09/11
4K0
Wellner 自适应阈值二值化算法
Python opencv图像处理基础总结(三) 图像直方图 直方图应用 直方图反向投影
图像直方图是反映一个图像像素分布的统计表,其横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。直方图的显示方式是左暗又亮,左边用于描述图像的暗度,右边用于描述图像的亮度。
叶庭云
2022/05/09
8790
Python opencv图像处理基础总结(三) 图像直方图 直方图应用 直方图反向投影
OpenCV图像处理笔记(二):图片操作进阶
一、图像模糊 1、模糊原理 Smooth/Blur 是图像处理中最简单和常用的操作之一 使用该操作的原因之一就为了给图像预处理时候减低噪声 使用Smooth/Blur操作其背后是数学的卷积计算 通常这
MiChong
2020/09/24
1.2K0
OpenCV图像处理笔记(二):图片操作进阶
Python opencv图像处理基础总结(二) ROI操作与泛洪填充 模糊操作 边缘保留滤波EPF
ROI(Region Of Interest),感兴趣区域,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,经常用来连接图像。
叶庭云
2020/09/17
3.1K0
Python  opencv图像处理基础总结(二)  ROI操作与泛洪填充  模糊操作  边缘保留滤波EPF
基于 OpenCV 与 Java 两个语言版本实现获取某一图片特定区域的颜色对比度
对比度是指图像中不同区域之间的明暗差异程度,它是图像质量中的重要指标之一。除了颜色对比度之外,常见的对比度包括:
程序员洲洲
2024/06/07
4130
基于 OpenCV 与 Java 两个语言版本实现获取某一图片特定区域的颜色对比度
推荐阅读
相关推荐
OpenCV中积分图介绍与应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验