当前位置: 首页 > news >正文

加强网站建设和维护工作新闻大全

加强网站建设和维护工作,新闻大全,提高工作效率整改措施,锻件开发设计公司1. 目标 在本节中#xff0c;我们将学习 使用OpenCV查找图像的傅立叶变换利用Numpy中可用的FFT功能傅立叶变换的一些应用我们将看到以下函数#xff1a;**cv.dft()** #xff0c;**cv.idft()** 等 理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像#xff0c;使用…1. 目标 在本节中我们将学习 使用OpenCV查找图像的傅立叶变换利用Numpy中可用的FFT功能傅立叶变换的一些应用我们将看到以下函数**cv.dft()** **cv.idft()** 等 理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像使用 2D离散傅里叶变换DFT 查找频域。快速算法称为 快速傅立叶变换FFT 用于计算DFT。关于这些的详细信息可以在任何图像处理或信号处理教科书中找到。请参阅其他资源_部分。 对于正弦信号$x(t)Asin(2\pi ft)$ 我们可以说 $f$ 是信号的频率如果采用其频域我们可以在 $f$ 处看到一个尖峰。如果信号进行采样以形成离散信号我们得到了相同的频域但在范围周期性 $[-ππ]$ 或 $[0,2\pi]$或 $[0,N]$ 用于N点DFT。您可以将图像视为在两个方向上采样的信号。因此在X和Y方向都进行傅立叶变换可以得到图像的频率表示。 更直观地说对于正弦信号如果振幅在短时间内变化如此之快则可以说它是高频信号。如果变化缓慢则为低频信号。您可以将相同的想法扩展到图像。图像中的振幅在哪里急剧变化在边缘点或噪音。因此可以说边缘和噪声是图像中的高频内容。如果幅度没有太大变化则它是低频分量。一些链接已添加到“其他资源”其中通过示例直观地说明了频率变换。 现在我们将看到如何找到傅立叶变换。 2.Numpy中的傅里叶变换 首先我们将看到如何使用Numpy查找傅立叶变换。Numpy具有FFT软件包来执行此操作。np.fft.fft2() 为我们提供了频率转换它将是一个复杂的数组。它的第一个参数是输入图像即灰度图像。第二个参数是可选的它决定输出数组的大小。如果它大于输入图像的大小则在计算FFT之前用零填充输入图像。如果小于输入图像将裁切输入图像。如果未传递任何参数则输出数组的大小将与输入的大小相同。 现在一旦获得结果零频率分量DC分量将位于左上角。如果要使其居中则需要将结果偏移 $\frac{N}{2}$ 在两个方向上。只需通过函数 np.fft.fftshift() 即可完成。它更容易分析。找到频率变换后就可以找到幅度谱。 import cv2 as cv import numpy as np from matplotlib import pyplot as plt img cv.imread(messi5.jpg,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。为此您需用尺寸为60x60的矩形窗口遮罩来消除低频。然后使用 np.fft.ifftshift() 应用反向移位以使DC分量再次出现在左上角。然后使用 np.ifft2() 函数找到逆FFT 。同样结果将是一个复数。您可以采用其绝对值来进行 rows, cols img.shape crow,ccol rows//2 , cols//2 fshift[crow-30:crow31, ccol-30:ccol31] 0 f_ishift np.fft.ifftshift(fshift) img_back np.fft.ifft2(f_ishift) img_back np.real(img_back) plt.subplot(131),plt.imshow(img, cmap gray) plt.title(Input Image), plt.xticks([]), plt.yticks([]) plt.subplot(132),plt.imshow(img_back, cmap gray) plt.title(Image after HPF), plt.xticks([]), plt.yticks([]) plt.subplot(133),plt.imshow(img_back) plt.title(Result in JET), plt.xticks([]), plt.yticks([]) plt.show() 结果如下  结果表明高通滤波是边缘检测操作。这就是我们在“图像渐变”一章中看到的。这也表明大多数图像数据都存在于频谱的低频区域。无论如何我们已经看到了如何在Numpy中找到DFTIDFT等。现在让我们看看如何在OpenCV中进行操作。 如果您仔细观察结果尤其是最后一张JET颜色的图像您会看到一些伪像我用红色箭头标记的一个实例。它在那里显示出一些波纹状结构称为 振铃效应 。这是由我们用于遮罩的矩形窗口引起的。此蒙版转换为正弦形状从而导致此问题。因此矩形窗口不用于过滤。更好的选择是高斯窗口。 3. OpenCV中傅里叶变换 OpenCV 为此提供了功能 cv.dft() 和 cv.idft() 。它返回与以前相同的结果但是有两个通道。第一个通道将具有结果的实部第二个通道将具有结果的虚部。输入的图像应首先转换为np.float32 。我们将看到如何做。 import numpy as np import cv2 as cv from matplotlib import pyplot as plt img cv.imread(messi5.jpg,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.cartToPolar() 一次返回大小和相位  因此现在我们必须进行逆DFT。在上一部分中我们创建了一个HPF这次我们将看到如何去除图像中的高频内容即我们将LPF应用于图像。实际上会使图像模糊。为此我们首先创建一个在低频时具有高值1的蒙版即我们传递LF含量并在HF区域传递0。  rows, cols img.shape crow,ccol rows/2 , cols/2 # create a mask first, center square is 1, remaining all zeros mask np.zeros((rows,cols,2),np.uint8) mask[crow-30:crow30, ccol-30:ccol30] 1 # apply mask and inverse DFT fshift dft_shift*mask f_ishift np.fft.ifftshift(fshift) img_back cv.idft(f_ishift) img_back cv.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() 查看结果  注意 像往常一样OpenCV函数 cv.dft() 和 cv.idft() 比Numpy对应函数要快。但是Numpy功能更加人性化。有关性能问题的更多详细信息请参阅以下部分。 4. DFT的性能优化 对于某些阵列大小DFT计算的性能更好。当阵列大小为2的幂时它是最快的。大小为2、3和5的乘积的数组也得到了有效处理。因此如果您担心代码的性能可以在找到DFT之前将数组的大小修改为任何最佳大小通过填充零。对于OpenCV您必须手动填充零。但是对于Numpy您可以指定FFT计算的新大小它将自动为您填充零。 那么我们如何找到这个最佳尺寸呢OpenCV 为此提供了一个函数 cv.getOptimalDFTSize() 。它适用于 cv.dft() 和 np.fft.fft2() 。让我们使用IPython magic命令timeit检查它们的性能。 In [16]: img cv.imread(messi5.jpg,0) In [17]: rows,cols img.shape In [18]: print({} {}.format(rows,cols)) 342 548 In [19]: nrows cv.getOptimalDFTSize(rows) In [20]: ncols cv.getOptimalDFTSize(cols) In [21]: print({} {}.format(nrows,ncols)) 360 576 参见将大小342,548修改为360576。现在让我们用零填充对于OpenCV并找到其DFT计算性能。您可以通过创建一个新的大零数组并将数据复制到其中来完成此操作或者使用 cv.copyMakeBorder() 。  nimg np.zeros((nrows,ncols)) nimg[:rows,:cols] img 要么  right ncols - cols bottom nrows - rows bordertype cv.BORDER_CONSTANT #just to avoid line breakup in PDF file nimg cv.copyMakeBorder(img,0,bottom,0,right,bordertype, value 0) 现在我们计算Numpy函数的DFT性能比较 In [22]: %timeit fft1 np.fft.fft2(img) 10 loops, best of 3: 40.9 ms per loop In [23]: %timeit fft2 np.fft.fft2(img,[nrows,ncols]) 100 loops, best of 3: 10.4 ms per loop 它显示了4倍的加速。现在我们将尝试使用OpenCV函数。  In [24]: %timeit dft1 cv.dft(np.float32(img),flagscv.DFT_COMPLEX_OUTPUT) 100 loops, best of 3: 13.5 ms per loop In [27]: %timeit dft2 cv.dft(np.float32(nimg),flagscv.DFT_COMPLEX_OUTPUT) 100 loops, best of 3: 3.11 ms per loop 它还显示了4倍的加速。您还可以看到OpenCV函数比Numpy函数快3倍左右。也可以对逆FFT进行测试这留给您练习。  5. 为什么拉普拉斯算子是高通滤波器 在论坛上提出了类似的问题。问题是为什么拉普拉斯算子是高通滤波器为什么Sobel是HPF等等。第一个得到的答案是傅里叶变换。只需对Laplacian进行傅立叶变换以获得更大的FFT大小。分析一下 import cv2 as cv import numpy as np from matplotlib import pyplot as plt # simple averaging filter without scaling parameter mean_filter np.ones((3,3)) # creating a gaussian filter x cv.getGaussianKernel(5,10) gaussian x*x.T # different edge detecting filters # scharr in x-direction scharr np.array([[-3, 0, 3],[-10,0,10],[-3, 0, 3]]) # sobel in x direction sobel_x np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]]) # sobel in y direction sobel_y np.array([[-1,-2,-1],[0, 0, 0],[1, 2, 1]]) # laplacian laplaciannp.array([[0, 1, 0],[1,-4, 1],[0, 1, 0]]) filters [mean_filter, gaussian, laplacian, sobel_x, sobel_y, scharr] filter_name [mean_filter, gaussian,laplacian, sobel_x, \sobel_y, scharr_x] fft_filters [np.fft.fft2(x) for x in filters] fft_shift [np.fft.fftshift(y) for y in fft_filters] mag_spectrum [np.log(np.abs(z)1) for z in fft_shift] for i in xrange(6):plt.subplot(2,3,i1),plt.imshow(mag_spectrum[i],cmap gray)plt.title(filter_name[i]), plt.xticks([]), plt.yticks([]) plt.show() 查看结果  从图像中您可以看到每个内核阻止的频率区域以及它经过的区域。从这些信息中我们可以说出为什么每个内核都是HPF或LPF
http://www.w-s-a.com/news/594587/

相关文章:

  • 红鱼洞水库建设管理局网站左右左布局网站建设
  • 手机网站建设地址做网站公
  • 贵州建设厅网站首页网络公司除了做网站
  • 运动鞋建设网站前的市场分析wordpress 搜索框代码
  • app开发网站开发教程平台网站开发的税率
  • 百度网站优化排名加强服务保障满足群众急需i
  • 宁夏建设职业技术学院网站安徽网站优化建设
  • 四川关于工程建设网站硬盘做网站空间
  • 桂林网站制作培训学校外包seo公司
  • 莱州网站建设方案北京装修公司口碑
  • 大型网站建设济南兴田德润团队怎么样韩国女足出线了吗
  • 南通做网站找谁重庆网络推广网站推广
  • ps网站主页按钮怎么做怎样做网站的用户分析
  • 哪个网站做黑色星期五订酒店活动公司网络营销推广软件
  • 岳阳新网网站建设有限公司网页设计基础考试题目
  • 辽宁响应式网站费用海外平台有哪些
  • 杨凌规划建设局网站网站后台建设怎么进入
  • 有赞商城网站建设企业管理咨询是做什么的
  • 提供衡水网站建设中国石化工程建设有限公司邮政编码
  • 大芬地铁站附近做网站工业设计公司报价
  • 建设网站最强永年网站建设
  • 网站分站代理加盟wordpress国内工作室主题
  • 东营远见网站建设公司服装网站建设内容
  • 互助平台网站建设费用百度seo优化怎么做
  • lol英雄介绍网站模板工商局网上注册
  • 电商网站运营策划什么样的网站容易做seo
  • 网站备案需要什么流程怎么创建小程序卖东西
  • 陇西网站建设 室内设计持啊传媒企业推广
  • 连云港做网站制作首选公司如何让单位网站做防护
  • wordpress企业网站源码开发网站用什么工具做设计