校园二手市场网站建设,做家务的男人网站,企业网站用视频做首页,推荐就业的培训机构文章目录 OpenCV图像处理之傅里叶变换图像处理之傅里叶变换流程图OpenCv图像处理之傅里叶变换OpenCv傅里叶变换之低通滤波OpenCv傅里叶变换之高通滤波 OpenCV图像处理之傅里叶变换
傅里叶变换#xff1a;目的就是得到图像的低频和高频#xff0c;然后针对低频和高频进行不同… 文章目录 OpenCV图像处理之傅里叶变换图像处理之傅里叶变换流程图OpenCv图像处理之傅里叶变换OpenCv傅里叶变换之低通滤波OpenCv傅里叶变换之高通滤波 OpenCV图像处理之傅里叶变换
傅里叶变换目的就是得到图像的低频和高频然后针对低频和高频进行不同的处理。处理完之后在通过逆变换恢复到图像这时候对低频和高频的处理就会反映到图像上。
频率 高频变化剧烈的灰度分量例如边界。 低频变化缓慢的灰度分量例如一天蓝天(相似的多)。 滤波 低通滤波器只保留低频会使图像模糊。 高通滤波器只保留高频会使图像细节增强。 图像处理之傅里叶变换流程图 OpenCV主要就是cv.dft()和cv.idft(),输入图像需要先转换成np.float32格式,得到的结果中频率为0,的部分会在左上角通常要转换到中心位置可以通过shift变换来实现, cv.dft()返回的结果是双通道的(实部、虚部)通常需要转换成图像格式才能展示0,255 OpenCv图像处理之傅里叶变换
# 读取一张灰度图像
img cv.imread(img/tree.jpg,0)
# 将图像转换成np.float32格式
img_float32 np.float32(img)
# cv.dft()函数进行傅里叶变换返回的结果是双通道的(实部、虚部)通常需要转换成图像格式才能展示0,255
dft cv.dft(img_float32, flags cv.DFT_COMPLEX_OUTPUT)
# 再调用 np.fft.fftshift() 函数将中心位置转移至中间。
dft_shift np.fft.fftshift(dft)
# cv.magnitude()是OpenCV中的一个函数用于计算两个数组的逐元素欧几里得距离。
# 具体来说该函数可以计算两个数组可以是实数或复数数组的逐元素欧几里得距离返回一个与输入数组形状相同的数组。
# 得到灰度图能表示的形式(转换成图像格式才能展示0,255)映射公式需要将像素值映射之0-255
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(OpenCV Magnitude Spectrum), plt.xticks([]), plt.yticks([])
plt.show()获取图像的中心位置
rows, cols img.shape
crow, ccol int(rows/2) , int(cols/2) # 中心位置OpenCv傅里叶变换之低通滤波
# 设置遮掩的形状(一般为矩形、圆形)大小(自定义)
mask np.zeros((rows, cols, 2), np.uint8)
mask[crow-50:crow50, ccol-50:ccol50] 1# IDFT
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(Result), plt.xticks([]), plt.yticks([])
plt.show()OpenCv傅里叶变换之高通滤波
# 设置遮掩的形状(一般为矩形、圆形)大小(自定义)
mask np.ones((rows, cols, 2), np.uint8)
mask[crow-5:crow5, ccol-5:ccol5] 0# IDFT
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(Result), plt.xticks([]), plt.yticks([])plt.show()大家可以更改mask的大小或形状对图像进行处理对比着学习起来更容易理解。
# 设置遮掩的形状(一般为矩形、圆形)大小(自定义)
mask np.zeros((rows, cols, 2), np.uint8)
mask[crow-30:crow30, ccol-30:ccol30] 1在这里给大家推荐几个关于傅里叶变换的学习网页以及视频。 哔站B站首发草履虫都能看懂的【傅里叶变换】讲解清华大学李永乐老师教你如何理解傅里叶变换辨清美颜和变声原理 傅里叶变换这样学何愁不会呢直观理解傅里叶变换 图像傅里叶变换实验