网站首页 > 技术文章 正文
我们尝试使用一下频域图像,也主要是傅里叶(FFT),图像如下:
频率及FFT:
首先,将空间域图像转换为时间域,看一下分布情况:
我们再看看一维频率分布情况:
h, w = gray.shape
x=np.arange(h)
plt.figure(figsize=(12,10))
plt.plot(x, log_p, 'g'), plt.title("FFT-频率分布1D(log10)")
plt.show()
通过观察上图,中心的低频区域大概100左右,我们可以通过高频滤波器保留高频部分,结果如下:
dft = cv2.dft(gray2.astype('float32'), flags = cv2.DFT_COMPLEX_OUTPUT) ### FFT
dft_shift = np.fft.fftshift(dft)
magnitude_spectrum = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1])) # 幅值对数变换
## 高频增强处理
D = 50
crow = dft_shift.shape[0]//2
ccol = dft_shift.shape[1]//2
dft_shift[crow-D:crow+D, ccol-D:ccol+D] = 0
dft_ishift = np.fft.ifftshift(dft_shift)
img_ = cv2.idft(dft_ishift)
img_back1 = cv2.magnitude (img_[:,:,0],img_[:,:,1])
img_back1a = np.zeros(gray2.shape, np.uint8)
img_back1a = (255.0 * img_back1/np.max(img_back1) ).astype(np.uint8)
img_back1a_hist = 4.0*img_back1a + 50
img_back1a_hist = np.round(img_back1a_hist)
img_back1a_hist = img_back1a_hist.astype(np.uint8)
效果如下:
滤波及分类:
滤波作用:高通滤波用于边缘检测,低通滤波用于图像平滑去噪;
(1)方波:线性滤波
(2)均值滤波:线性滤波
(3)中值滤波:(非线性滤波)
(4)高斯滤波:线性滤波
r = cv2.GaussianBlur(gray2, (3,3), 7)
f1 = gray_f_spectrum(gray2)
f2 = gray_f_spectrum(r)
plt.figure(figsize=(15, 10))
plt.subplot(221), plt.imshow(gray2, 'gray'), plt.title("原图")
plt.subplot(222), plt.imshow(f1, 'gray'), plt.title("原图FFT")
plt.subplot(223), plt.imshow(r, 'gray'), plt.title("高斯滤波")
plt.subplot(224), plt.imshow(f2, 'gray'), plt.title("高斯滤波FFT")
拉普拉斯卷积核
kernLaplace = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]]) # Laplacian kernel
Laplace1 = cv2.filter2D(gray2, -1, kernLaplace, borderType=cv2.BORDER_REFLECT)
# 使用 cv2.Laplacian 实现 Laplace 卷积算子
Laplace2 = cv2.Laplacian(gray2, -1, ksize=3)
imgRecovery = cv2.add(gray2, Laplace2) # 恢复原图像
# 二值化边缘图再卷积
_, binary = cv2.threshold(gray2, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_TRIANGLE)
Laplace3 = cv2.Laplacian(binary, cv2.CV_64F)
Laplace3 = cv2.convertScaleAbs(Laplace3)
plt.figure(figsize=(15, 10))
plt.subplot(131), plt.axis('off'), plt.title("原图")
plt.imshow(gray2, 'gray', vmin=0, vmax=255)
plt.subplot(132), plt.axis('off'), plt.title("cv2.Laplacian:拉普拉斯")
plt.imshow(Laplace2, 'gray', vmin=0, vmax=255)
plt.subplot(133), plt.axis('off'), plt.title("thresh-Laplacian")
plt.imshow(Laplace3, 'gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()
钝化掩蔽
猜你喜欢
- 2024-11-03 正点原子开拓者FPGA开发板资料连载第五十二章 低通滤波器实验
- 2024-11-03 低通滤波和高通滤波的截止频率设定思路
- 2024-11-03 「科唛小课堂」如何解决录制的爆音、喷麦声?
- 2024-11-03 「正点原子NANO STM32开发板资料连载」第三十二章 DSP 测试实验
- 2024-11-03 最好的频谱分析仪基础知识 频谱分析仪的作用与性能
- 2024-11-03 OER的几何重构 几何分解重构图
- 2024-11-03 关于分频音箱问题的非专业理想解决方案
- 2024-11-03 STM32单片机从零开始使用教程(八) FIR滤波器
- 2024-11-03 深入剖析C++音频信号处理:ASL库的高级应用与实践
- 2024-11-03 耳朵为啥老是嗡嗡响:看看你中了几条
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)