共计 920 个字符,预计需要花费 3 分钟才能阅读完成。
提醒:本文最后更新于 2024-10-04 08:11,文中所关联的信息可能已发生改变,请知悉!
降噪后出现边缘“毛刺”问题
中值滤波
使用 opencv 中的 medianBlur 解决方案:
medianBlur_new_img = cv.medianBlur(new_img, 3)
可以优化之前的降噪效果:

效果几乎达到理想状态(只有四周边界有些许噪声残留)
探究中值滤波起了多大作用
尝试直接使用中值滤波对噪声图进行降噪:
# python3.8
# utf-8
import cv2 as cv
def main(address):
img = cv.imread(address, 1)
new_img = cv.medianBlur(img, 3)
cv.imwrite('denoised_' + address, new_img)
if __name__ == '__main__':
img_address = 'img_noise.png'
main(img_address)
得到结果:

虽然效果略微比上面差一点,但是几乎接近。
那么从这个结果看,可以看出中值滤波的算法非常优秀,虽然这无法证明中值滤波在上面试验中起到了多大作用,但也说明了我的方法效果还是欠缺的。
增加噪声
将噪声增加到 8000 个,也就是 20% 的噪声:
import cv2 as cv
import numpy as np
import random
img = cv.imread("img.png", 1)
(rows, cols, chn) = img.shape
cv.imshow("img.png", img)
# 加噪声
for i in range(8000):
x = np.random.randint(0, rows)
y = np.random.randint(0, cols)
img[x, y, :] = random.randint(0, 255)
cv.imshow("noise", img)
cv.imwrite("img_noise.png", img)
cv.waitKey()
cv.destroyAllWindows()

中值滤波
直接使用中值滤波,得到:

这次得到的结果就并不理想了
我的方法 + 中值滤波
得到:

结果优于直接使用中值滤波,在不放大的情况下,肉眼不太看得出噪声,放大之后,发现边缘部分仍有极少量“毛刺”,且边缘界限变得模糊。对于肉眼观察来说,图像变得柔和;对于寻找边缘来说,变得不明确。
正文完