位置: IT常识 - 正文

OpenCV中的图像处理 —— 傅里叶变换+模板匹配(opencv如何显示图片)

编辑:rootadmin
OpenCV中的图像处理 —— 傅里叶变换+模板匹配 OpenCV中的图像处理 —— 傅里叶变换+模板匹配

推荐整理分享OpenCV中的图像处理 —— 傅里叶变换+模板匹配(opencv如何显示图片),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opencv图形界面,opencv如何显示图片,opencv 图像,opencv的图像处理函数,opencv 图像,opencv 图像,opencv的图像处理函数,opencv的图像处理函数,内容如对您有帮助,希望把文章链接给更多的朋友!

现在也在逐渐深入啦,希望跟大家一起进步越来越强

目录OpenCV中的图像处理 —— 傅里叶变换+模板匹配1. 傅里叶变换1.1 Numpy实现傅里叶变换1.2 OpenCV实现傅里叶变换1.3 DFT的性能优化2. 模板匹配2.1 单对象的模板匹配2.2 多对象的模板匹配1. 傅里叶变换

关于傅里叶变换最重要的两个概念:时域与频域。以时间作为参照来观察动态世界的方法我们称其为时域分析,而频域是什么呢,它是描述信号在频率方面特性时用到的一种坐标系,频域图显示了在一个频率范围内每个给定频带内的信号量。贯穿时域与频域的方法之一就是大名鼎鼎的傅里叶分析,它可以分为傅里叶级数和傅里叶变换,傅里叶变换也就是我们这一部分要说的东西

傅里叶变换是分析线性系统的一个有力工具。 它告诉我们任何周期函数,都可以看作是不同振幅,不同相位正弦波的叠加。从数学意义上说,傅里叶变换将一个任意的周期函数分解成为无穷个正弦函数的和的形式;从物理效果上看,傅里叶变换实现了将信号从空间域到频率域的转换

在计算机视觉中傅立叶变换用于分析各种滤波器的频率特性,对于图像,使用2D离散傅里叶变换(DFT)查找频域(还有一种称为快速傅立叶变换(FFT)的快速算法)这一段文字是不是不太好理解,因为里面涉及太多比较深奥的东西了,傅里叶变换本身是比较难的一个点,在这里我就不细说了,我们只说说在计算机视觉领域我们是怎么用它的,想要深入了解的同学来看看这篇文章:深入浅出的讲解傅里叶变换(真正的通俗易懂)

对于正弦信号,如果幅度在短时间内变化比较快,则可以说它是高频信号,如果变化缓慢,则为低频信号,我们可以将相同的想法扩展到图像,图像中的振幅在哪里急剧变化?当然是在边缘点或噪声,因此,可以说边缘和噪声是图像中的高频内容

1.1 Numpy实现傅里叶变换

Numpy提供了FFT软件包来查找傅里叶变换,np.fft.fft2()为我们提供了频率转换,它将是一个复杂的数组,它的第一个参数是输入图像(灰度图像),第二个参数是可选的,它决定输出数组的大小。如果它大于输入图像的大小,则在计算FFT之前用零填充输入图像。如果小于输入图像,将裁切输入图像。如果未传递任何参数,则输出数组的大小将与输入的大小相同,但是现在获得的结果它的零频率分量(DC分量)将位于左上角,为了便于分析我们要把它居中,居中处理关系到np.fft.fftshift()函数

import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltimg = cv.imread(r'E:\image\test16.png', 0)f = np.fft.fft2(img)fshift = np.fft.fftshift(f)magnitude_spectrum = 20 * np.log(np.abs(fshift))plt.subplot(121), plt.imshow(img, cmap='gray')plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])plt.show()

我们可以看到幅度谱的中心有更多白色区域,说明图像低频内容更多。找到了幅度谱那我们是不是可以在频域中进行一些操作呢?例如高通滤波和重建图像,实质就是找到逆DFT,我们首先要用尺寸为60*60的矩形窗口遮罩抵消低频信号,然后使用np.fft.ifftshift()应用反向移位,以使DC分量再次出现在左上角。然后使用np.ifft2()函数找到逆FFT,结果同样是一个复数

import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltimg = cv.imread(r'E:\image\test15.png', 0)f = np.fft.fft2(img)fshift = np.fft.fftshift(f)magnitude_spectrum = 20 * np.log(np.abs(fshift))rows, cols = img.shapecrow, ccol = rows//2, cols//2fshift[crow - 30:crow + 31, ccol - 30:ccol + 31] = 0f_ishift = np.fft.ifftshift(fshift)img_back = np.fft.ifft2(f_ishift)img_back = np.abs(img_back)plt.subplot(131), plt.imshow(img, cmap='gray'),plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(132), plt.imshow(magnitude_spectrum, cmap='gray')plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])plt.subplot(133), plt.imshow(img_back)plt.title('Result in JET'), plt.xticks([]), plt.yticks([])plt.show()OpenCV中的图像处理 —— 傅里叶变换+模板匹配(opencv如何显示图片)

1.2 OpenCV实现傅里叶变换

OpenCV为此提供了cv.dft()和cv.idft()函数。它返回与前一个相同的结果,但是有两个通道。第一个通道是结果的实部,第二个通道是结果的虚部。输入图像首先应转换为np.float32

import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltimg = cv.imread(r'E:\image\test17.png', 0)dft = cv.dft(np.float32(img), flags=cv.DFT_COMPLEX_OUTPUT)dft_shift = np.fft.fftshift(dft)magnitude_spectrum = 20 * np.log(cv.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))plt.subplot(121), plt.imshow(img, cmap='gray')plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])plt.show()

这一块儿代码有几个难懂的地方,没关系我们来分析一下:第一次看这段代码会有几个疑问,cv.dft()函数的参数怎么传递?cv.magnitude()函数是怎么用的?

cv.dft()函数的作用是对一维或者二维浮点数数组进行正向或反向离散傅里叶变换,其中包括4个参数,第一个即源图像,第二个参数是OutputArray类型的dst,函数调用后返回的运算结果存在这里,它的尺寸和类型取决于第三个参数flags转换标识符,它的默认值为0(参考自:opencv:dft()函数详解)

cv.magnitude()函数用来计算二维矢量的幅值,其中包括3个参数,第一个是InputArray类型的x,表示矢量的浮点型X坐标值,也就是实部,第二个参数是InputArray类型的y,表示矢量的浮点型Y坐标值,也就是虚部,第三个参数是输出的幅值

接下来我们需要做OpenCV中DFT的逆变换,上一节用了高通滤波器HPF,这一部分我们会将低通滤波器LPF应用到图像中

注意:通常,OpenCV函数cv.dft()和cv.idft()比Numpy函数更快,大约快3倍,但是Numpy函数更容易使用

我们把这一部分的代码放在后面,与DFT的性能优化放在一起更容易理解

1.3 DFT的性能优化

对于某些数组尺寸,DFT的计算性能较好,例如当数组大小为2的幂时,速度最快,对于大小为2、3和5的乘积的数组,也可以非常有效地进行处理,关于代码的性能问题,我们可以在找到DFT之前将数组的大小修改为任何最佳大小(通过填充零),对于OpenCV,我们必须手动填充零,但是对于Numpy,指定FFT计算的新大小,它将自动为您填充零

关于寻找最优大小,OpenCV为此提供了一个函数:cv.getOptimalDFTSize()

import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread(r'E:\image\test17.png', 0)rows, cols = img.shapeprint(rows, cols)# 计算DFT效率最佳的尺寸nrows = cv2.getOptimalDFTSize(rows)ncols = cv2.getOptimalDFTSize(cols)print(nrows, ncols)nimg = np.zeros((nrows, ncols))nimg[:rows, :cols] = imgimg = nimg# OpenCV计算快速傅里叶变换,输入图像应首先转换为np.float32,然后使用函数cv2.dft()和cv2.idft()。# 返回结果与Numpy相同,但有两个通道。第一个通道为有结果的实部,第二个通道为有结果的虚部。dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)dft_shift = np.fft.fftshift(dft)magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))plt.subplot(121), plt.imshow(img, cmap='gray')plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])plt.show()rows, cols = img.shapecrow, ccol = rows // 2, cols // 2# 首先创建一个mask,中心正方形为1,其他均为0# 如何删除图像中的高频内容,即我们将LPF应用于图像。它实际上模糊了图像。# 为此首先创建一个在低频时具有高值的掩码,即传递LF内容,在HF区域为0。mask = np.zeros((rows, cols, 2), np.uint8)mask[crow - 30:crow + 30, ccol - 30:ccol + 30] = 1# 应用掩码Mask和求逆DTFfshift = dft_shift * maskf_ishift = np.fft.ifftshift(fshift)img_back = cv2.idft(f_ishift)img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])plt.subplot(121), plt.imshow(img, cmap='gray')plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(img_back, cmap='gray')plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])plt.show()

版权

本文链接地址:https://www.jiuchutong.com/zhishi/300297.html 转载请保留说明!

上一篇:第09章_异常处理(异常处理流程为哪几个部分)

下一篇:疑问搞懂,python中文词频统计,让你真能学会(python答疑)

  • 华为浏览器下载的文件在哪里呢(华为浏览器下载文件删除恢复)

    华为浏览器下载的文件在哪里呢(华为浏览器下载文件删除恢复)

  • 微信对方忙线中是拉黑吗(微信对方忙线中可以设置吗)

    微信对方忙线中是拉黑吗(微信对方忙线中可以设置吗)

  • 华为p40 pro是5g手机吗(华为p40pro是真正意义上的5g吗)

    华为p40 pro是5g手机吗(华为p40pro是真正意义上的5g吗)

  • 抖音视频为什么加载不了(抖音视频为什么突然没有浏览量)

    抖音视频为什么加载不了(抖音视频为什么突然没有浏览量)

  • 荣耀20pro和nova5pro区别(荣耀20pro和nova7对比)

    荣耀20pro和nova5pro区别(荣耀20pro和nova7对比)

  • iphone骚扰拦截怎么弄(苹果手机的骚扰拦截)

    iphone骚扰拦截怎么弄(苹果手机的骚扰拦截)

  • 手机淘宝自动播放关闭不了(手机淘宝如何关闭自动播放)

    手机淘宝自动播放关闭不了(手机淘宝如何关闭自动播放)

  • 阴阳屏会不会越来越严重(阴阳屏怎么导致的)

    阴阳屏会不会越来越严重(阴阳屏怎么导致的)

  • 抖音聊天列表怎么自动没有(抖音聊天列表怎么一键清空)

    抖音聊天列表怎么自动没有(抖音聊天列表怎么一键清空)

  • 路由器上的wps按钮在哪里(路由器上的wps按了会怎么样)

    路由器上的wps按钮在哪里(路由器上的wps按了会怎么样)

  • 华为智慧生活是干嘛的(华为智慧生活是不是只能添加华为产品)

    华为智慧生活是干嘛的(华为智慧生活是不是只能添加华为产品)

  • e31231v3相当于i7什么(e31231v3相当于i57500)

    e31231v3相当于i7什么(e31231v3相当于i57500)

  • 抖音怎么上传长视频10分钟(抖音怎么上传长视频)

    抖音怎么上传长视频10分钟(抖音怎么上传长视频)

  • 恢复微博删除的私信(恢复被删除的微博)

    恢复微博删除的私信(恢复被删除的微博)

  • ipad一直重复闪苹果标志(ipad一直闪频)

    ipad一直重复闪苹果标志(ipad一直闪频)

  • 微信面对面建群有距离限制吗(微信面对面建群有时间限制吗)

    微信面对面建群有距离限制吗(微信面对面建群有时间限制吗)

  • ppt文字样式怎么设置母版(ppt文字形状怎么设置)

    ppt文字样式怎么设置母版(ppt文字形状怎么设置)

  • 误卸载了微信怎么恢复(不小心卸载了微信)

    误卸载了微信怎么恢复(不小心卸载了微信)

  • word被锁定不能修改(word锁定不能编辑,选项也停用)

    word被锁定不能修改(word锁定不能编辑,选项也停用)

  • ssl协议的基本概念(ssl协议包括哪些协议)

    ssl协议的基本概念(ssl协议包括哪些协议)

  • typec数据线3a5a什么意思(数据线typec3a和5a有什么区别)

    typec数据线3a5a什么意思(数据线typec3a和5a有什么区别)

  • 爱奇艺为什么突然没有字幕了(爱奇艺为什么突然没有弹幕了)

    爱奇艺为什么突然没有字幕了(爱奇艺为什么突然没有弹幕了)

  • 闲鱼怎么看卖家账号(闲鱼怎么看卖家手机号)

    闲鱼怎么看卖家账号(闲鱼怎么看卖家手机号)

  • 饿了么怎么查账单(饿了么怎么查账单明细)

    饿了么怎么查账单(饿了么怎么查账单明细)

  • word前几页不编页码怎么设置(word里前几页不带页码,后几页带页码)

    word前几页不编页码怎么设置(word里前几页不带页码,后几页带页码)

  • 如何让微信静音(苹果手机如何让微信静音)

    如何让微信静音(苹果手机如何让微信静音)

  • htcj是什么手机(htc叫啥)

    htcj是什么手机(htc叫啥)

  • windows密钥在哪里找(windows密钥在哪个文件)

    windows密钥在哪里找(windows密钥在哪个文件)

  • 华为mate20pro新机有膜吗(华为mate20pro新机扰码查询比用过22次正常吗)

    华为mate20pro新机有膜吗(华为mate20pro新机扰码查询比用过22次正常吗)

  • 合伙企业所得税怎么征收
  • 公对公退款要交税吗
  • 增值税有定额税率吗
  • 管理费里面可以取现金吗
  • 个人劳务费 税
  • 缓缴税款到期缴纳填主表第几行
  • 转出上年的进项税额怎么做分录
  • 增值税即征即退会计处理
  • 募捐建议
  • 工资退回怎么处理
  • 开发票具体内容超过经营范围还可以开吗?
  • 电费发票勾选是啥意思
  • 信用证和银行承兑汇票的区别如何做分录
  • 费用结转到本年利润是手动还自动结转?
  • 固定资产分期抵扣怎么申报增值税?
  • 外汇实收资本如何做账
  • 多计提企业所得税费用会计分录
  • 广告制作费怎么入账
  • 应交税费的借方表示什么
  • 政府补贴的银行卡注销了会怎么样
  • 收到挂靠方应缴纳税款如何做账?
  • linux和windows关系
  • arp防火墙是什么意思
  • 关于已开发票收到部分款项风险温馨提示
  • 保证金结息的会计分录
  • win10右键菜单管理在哪打开
  • 用php做一个表格
  • 政府划入资产会计处理
  • 联营企业分得的利润应计入
  • 腾达路由器桥接的方法
  • 商品销售税金及附加包括哪些
  • 转让居民企业的股权所得交企业所得税吗
  • 进项税额转出可以填负数吗
  • vue 实战
  • 权益工具与金融负债的转换
  • ajax调用
  • 快速傅里叶变换matlab
  • 命令提示符用不了怎么办
  • php第三方支付
  • php邮箱smtp发信源码
  • 印花税城建税和教育费附加怎么算
  • 著作权费用
  • 帝国cms移动端
  • 又是客户又是供应商的舞弊行为
  • 失控发票要补交所得税吗
  • 外籍个人是否可以买社保
  • 差旅费包括哪些项目
  • 税审报告需要什么资料
  • 补交以前年度增值税如何入账
  • 权益法下股权投资转让
  • 企业银行贷款保证金多少
  • 收到上月已付款的材料
  • 长期借款和长期贷款一样吗
  • 处置投资性房地产取得的收入属于企业收入吗
  • 银行回单借贷标志贷表示什么
  • 私营企业固定资产法律制度
  • 怎么设置库存限额
  • windows 2003 iis+php5+mysql+phpmyadmin 详细安装配置
  • linux pptp客户端
  • 无windows什么意思
  • windows保护电脑
  • rtos用什么语言
  • JavaScript的strict模式与with关键字介绍
  • jquery 随机函数
  • nodejs查找文件
  • node.js 作用
  • 【ExpandableListView】ExpandableListView互斥展开效果
  • android 字体设置
  • unity 求角度
  • unity给物体添加重力
  • unity she
  • Android eclipse for mac redo 快捷键
  • javascript设置字体
  • jquery实现搜索功能
  • 土地交易的印花税
  • 如何参与发票摇奖
  • 企业承包经营责任制
  • 山东济南税务局投诉电话
  • 河南省郸城县教育局举报电话
  • 企业支付的年度报告审计费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设