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

重磅干货,第一时间送达

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. webstorm设置点击(单击)左侧项目资源管理器里面的文件,自动在右侧打开源代码文件
  2. Mac OS增删环境变量
  3. 禁止PHP警告性错误
  4. 一个为制造业而生的AI助手,普通员工向它提问就能做数据分析
  5. 【转】ssh服务器启动和客户端常用操作
  6. 微服务监控zipkin、skywalking以及日志ELK监控系列
  7. 数据库:SQL 窗口函数知识介绍
  8. PictureBox
  9. MySQL高级 —— 高性能索引
  10. Nestable 可移动拖拽的树型结构的使用(jQuery)
  11. Trinotate-转录组注释
  12. 函数及脚本的综合应用
  13. iOS底层探索之多线程(十)—GCD源码分析( 信号量dispatch_semaphore_t)
  14. 蓝桥杯2019c语言b组试题,2020年7月B组C++蓝桥杯真题试水
  15. 新版gsp计算机系统全套资料,新版GSP对计算机系统的需求表
  16. Linux系统设置屏幕分辨率
  17. 爱奇艺视频怎么下载,如何将qsv格式转为mp4格式
  18. Revit开发之内建模型
  19. np.random.seed()函数
  20. 【AE表达式】300多个人名正从宇宙中飞来……

热门文章

  1. 激光雷达和毫米波雷达工作原理对比
  2. fiddler图片替换
  3. 封装Hive通过beeline 连接并设置队列
  4. 【单片机毕业设计】【mcuclub-jj-010】基于单片机的饮水机的设计
  5. 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码
  6. A Game of Thrones(82)
  7. C#获取文件的Content-Type(MIME Type)的三种方法
  8. Unity中的Transform Gizmo中的Pivot和Center
  9. 三菱服务器显示d1d2,三菱PLC指令SMOV D2 K2 K2 D1 K3详解
  10. h5调取摄像头实时显示并点击按钮拍照