点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

NCC概述

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

NCC数学知识

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

算法步骤

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

  1. 把彩色图像转换为灰度图像

  2. 预计算模板图像和目标图像的积分图

  3. 根据输入的窗口半径大小使用积分图完成NCC计算

  4. 根据阈值得到匹配或者不匹配区域。

  5. 输出结果

检测结果:

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

被污染的电路版

检测结果:

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

import cv2 as cv
import numpy as npdef 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 sdef blur_demo(image, ii):h, w, dims = image.shaperesult = np.zeros(image.shape, image.dtype)ksize = 15radius = ksize // 2for 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 // numcv.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()

好消息!

小白学视觉知识星球

开始面向外开放啦

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

  1. 图像处理之积分图应用三(基于NCC快速相似度匹配算法)

    from:https://blog.csdn.net/jia20003/article/details/53021614 图像处理之积分图应用三(基于NCC快速相似度匹配算法) 基于Normalize ...

  2. 图像处理之积分图应用二(快速边缘保留滤波算法)

    图像处理之积分图应用二(快速边缘保留滤波算法) 一:基本原理 传统的图像边缘保留滤波算法-如高斯双边模糊.Mean-Shift模糊等计算复杂.效率比较低,虽然有各种手段优化或者快速计算方法,当时算法相 ...

  3. 在pycharm2021.2中学习opencv图像处理,基于python3.9.7、pycharm完成配置

    在pycharm中学习opencv图像处理 安装python 下载python安装包 开始安装 安装pycharm社区版 下载pycharm安装包 开始安装 启动pycharm创建第一个项目 创建第一 ...

  4. OpenCV图像处理:基于RANSAC的二维图像中直线、圆及椭圆的检测 C++

    基于ransac的直线.圆及椭圆检测算法C++代码 LINK: https://github.com/Yiphy/Ransac-2d-Shape-Detection # Ransac-2d-Shape ...

  5. OpenCV积分图函数:integral ()详解

    /**************************************************************************************************/ ...

  6. 人脸检测:经典的VJ人脸检测器(类Harr特征,积分图加速法,级联的Adaboost强分类器)

    著名的VJ人脸检测算法就是一种基于Adaboost分类器的方法.该检测器由Paul Viola和Michael Jones在2001年的 Robust Real-Time Face Detection ...

  7. 积分图实现快速均值滤波

    写在前面 在实际应用中,效率是不得不考虑的问题.上一篇博客介绍了均值滤波原理,这一篇就写用积分图实现的快速均值滤波吧. 还是贴一下常规与快速的效率对比吧: 下图是常规均值滤波处理一张分辨率为485*5 ...

  8. 【OpenCV】OpenCV中积分图函数与应用

    OpenCV中积分图函数与应用 参考资料 opencv 查找integral,目前网上大部分的资料来自于opencv https://docs.opencv.org/master/d7/d1b/gro ...

  9. OpenCV中积分图介绍与应用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一:图像积分图概念 积分图像是Crow在1984年首次提出,是为了 ...

最新文章

  1. LNMP_ 配置文件
  2. K-Means聚类算法进行压缩图片
  3. 求两个集合的差集代码_求求你了,不要再写循环求两个列表的交集,并集和差集了 | pythonic 小技巧...
  4. 【Python】Python中的文本处理
  5. cocos 时间函数需要什么引用_酱香型白酒,为什么需要长时间储存?
  6. 卷积神经网络 手势识别_如何构建识别手语手势的卷积神经网络
  7. Python3 基础学习笔记 C04【if 语句】
  8. 程序员考核的五大死因
  9. 冲刺阶段一 11.15--11.21
  10. Linux Bash命令关于程序调试详解
  11. 初始化map和list的两种写法
  12. Unity3D插件开发
  13. con 元器件符号_altium designer常用元件电气符号和封装形式
  14. 4万字的“整洁三部曲”干货,全浓缩在这一篇里了
  15. python数列求和_python练习--数列求和
  16. 用友U8 cloud释放新动能,加速城投行业数智化转型
  17. 【Redis】Linux安装Redis步骤详细讲解,以及make、make install区别
  18. eap wifi 证书_WIFI用户EAP-TLS认证.pdf
  19. Mysql—索引①:原理篇
  20. VirtualBox:无法访问共享文件夹

热门文章

  1. 一只大二狗的Android历程--文件输入输出流 SharedPreference
  2. 中关村回收贩曝黑幕:翻新一部iPhone4可赚2000元
  3. 达梦8在VMware虚拟机麒麟系统下命令安装
  4. 这样软件开发人才级别的划分你同意吗
  5. Spring Cloud 异常“ Caused by: java.net.UnknownHostException: discovery.host ”
  6. 深度学习各类性能指标含义解释
  7. 寻路问题——找到从起点到终点路径
  8. beego使用API自动化文档生成swagger时,routers目录下无法生成commentsRouter_controllers.go文件
  9. 开关电源计算机仿真技术pdf,《开关电源仿真设计》PPT课件.ppt
  10. Ubuntu 阿里源更新 amp;amp; nvidia驱动安装 amp;amp; cuda 安装