【python-opencv】16-图像平滑

时间:2023-03-09 21:22:11
【python-opencv】16-图像平滑

【微语】“你以后向成为什么样的人?”    “什么意思,难道我以后就不能成为我自己吗?”    ----《阿甘正传》

【python-opencv】16-图像平滑

补充知识点:如何理解图像的低频是轮廓,高频是噪声和细节

图像的频率:灰度值变化剧烈程度的指标,是灰度在平面空间上的梯度。

(1)什么是低频?
      低频就是颜色缓慢地变化,也就是灰度缓慢地变化,就代表着那是连续渐变的一块区域,这部分就是低频. 对于一幅图像来说,除去高频的就是低频了,也就是边缘以内的内容为低频,而边缘内的内容就是图像的大部分信息,即图像的大致概貌和轮廓,是图像的近似信息。 (2)什么是高频?      反过来, 高频就是频率变化快.图像中什么时候灰度变化快?就是相邻区域之间灰度相差很大,这就是变化得快.图像中,一个影像与背景的边缘部位,通常会有明显的差别,也就是说变化那条边线那里,灰度变化很快,也即是变化频率高的部位.因此,图像边缘的灰度值变化快,就对应着频率高,即高频显示图像边缘。图像的细节处也是属于灰度值急剧变化的区域,正是因为灰度值的急剧变化,才会出现细节。
      另外噪声(即噪点)也是这样,在一个像素所在的位置,之所以是噪点,就是因为它与正常的点颜色不一样了,也就是说该像素点灰度值明显不一样了,,也就是灰度有快速地变化了,所以是高频部分,因此有噪声在高频这么一说。       其实归根到底,是因为我们人眼识别物体就是这样的.假如你穿一个红衣服在红色背景布前拍照,你能很好地识别么?不能,因为衣服与背景融为一体了,没有变化,所以看不出来,除非有灯光从某解度照在人物身上,这样边缘处会出现高亮和阴影,这样我们就能看到一些轮廓线,这些线就是颜色(即灰度)很不一样的地方.
import cv2
import numpy as np
from matplotlib import pyplot as plt img = cv2.imread('opencv_logo.png') kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel) plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()

【python-opencv】16-图像平滑

【python-opencv】16-图像平滑

import cv2
import numpy as np
from matplotlib import pyplot as plt img = cv2.imread('opencv_logo.png') blur = cv2.blur(img,(5,5)) plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()

【python-opencv】16-图像平滑

【python-opencv】16-图像平滑

#0 根据窗口大小(5,5)来计算高斯函数标准差【python-opencv】16-图像平滑
blur = cv2.GaussianBlur(img,(5,5),0)

【python-opencv】16-图像平滑

【python-opencv】16-图像平滑

median = cv2.medianBlur(img,5)

【python-opencv】16-图像平滑

【python-opencv】16-图像平滑

#9 邻域直径,两个75 分别表示空间高斯函数标准差,灰度值相似性高斯函数标准差
blur = cv2.bilateralFilter(img,9,75,75)

【python-opencv】16-图像平滑

看上面的纹理被模糊掉了,但是边界还保留了