题目
9.(3 分)下列关于中值滤波的说法中正确的是( )
A. 中值滤波是线性滤波
B. 中值滤波适用于去除加性高斯噪声
C. 中值滤波的效果与噪声像素的数量无关
D. 对图像反复做充分多次中值滤波之后,结果不会再改变
代码
# -*- coding: utf-8 -*-
# @Time : 2021/4/17 8:03
# @Author : Zhang Jun
# @File : t2.py
# @Software: PyCharm
# 验证多次中值滤波后图像不再改变
import cv2
import numpy as np
import module_24_to_8
img = np.array([[46, 31, 78, 53],
[67, 14, 56, 23],
[65, 44, 3, 29],
[60, 49, 36, 12]],dtype='uint8')
# img = np.random.randint(0, 255, (512, 512),dtype='uint8')
# 显示图片
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
img_median = cv2.medianBlur(img, 3)
img_median2 = cv2.medianBlur(img_median, 3)
img_median3 = cv2.medianBlur(img_median2, 3)
img_median4 = cv2.medianBlur(img_median3, 3)
img_median5 = cv2.medianBlur(img_median4, 3)
img_median6 = cv2.medianBlur(img_median5, 3)
img_median7 = cv2.medianBlur(img_median6, 3)
可见,迭代到第七次就完全相同了
循环迭代
# -*- coding: utf-8 -*-
# @Time : 2021/4/17 8:03
# @Author : Zhang Jun
# @File : t2.py
# @Software: PyCharm
# 验证多次中值滤波后图像不再改变
import cv2
import numpy as np
import module_24_to_8
img = np.array([[46, 31, 78, 53],
[67, 14, 56, 23],
[65, 44, 3, 29],
[60, 49, 36, 12]], dtype='uint8')
# img = np.random.randint(0, 255, (512, 512),dtype='uint8')
count = 0 # 记录迭代次数
while True:
img_median = cv2.medianBlur(img, 3)
count += 1
if (img_median == img).all():
break
img = img_median
print('做了'+str(count)+'次中值滤波后结果不再改变')
验证大一点的矩阵
# -*- coding: utf-8 -*-
# @Time : 2021/4/17 9:16
# @Author : Zhang Jun
# @File : t3.py
# @Software: PyCharm
# -*- coding: utf-8 -*-
# @Time : 2021/4/17 8:03
# @Author : Zhang Jun
# @File : t2.py
# @Software: PyCharm
# 验证多次中值滤波后图像不再改变
import cv2
import numpy as np
import module_24_to_8
# img = np.array([[46, 31, 78, 53],
# [67, 14, 56, 23],
# [65, 44, 3, 29],
# [60, 49, 36, 12]], dtype='uint8')
img = np.random.randint(0, 255, (100, 100),dtype='uint8')
count = 0 # 记录迭代次数
while True:
img_median = cv2.medianBlur(img, 3)
count += 1
if (img_median == img).all():
break
print(count, np.sum((img_median == img) == False))
img = img_median
print('做了'+str(count)+'次中值滤波后结果不再改变')
100*100的矩阵31次后结果不变
# -*- coding: utf-8 -*-
# @Time : 2021/4/17 9:16
# @Author : Zhang Jun
# @File : t3.py
# @Software: PyCharm
# -*- coding: utf-8 -*-
# @Time : 2021/4/17 8:03
# @Author : Zhang Jun
# @File : t2.py
# @Software: PyCharm
# 验证多次中值滤波后图像不再改变
import cv2
import numpy as np
import module_24_to_8
# img = np.array([[46, 31, 78, 53],
# [67, 14, 56, 23],
# [65, 44, 3, 29],
# [60, 49, 36, 12]], dtype='uint8')
img = np.random.randint(0, 255, (512, 512), dtype='uint8')
count = 0 # 记录迭代次数
while True:
img_median = cv2.medianBlur(img, 11)
count += 1
if (img_median == img).all():
break
print(count, np.sum((img_median == img) == False))
if np.sum((img_median == img) == False) < 10:
for i in range(200):
for j in range(200):
if img[i, j] != img_median[i, j]:
print(i, j)
img = img_median
print('做了' + str(count) + '次中值滤波后结果不再改变')
512512的矩阵,中值滤波模板是1111,运行1047次结果不再改变
虽然不是很严谨,但是对于选择题应该可以确定答案了。随着迭代次数的增加,结果应该是收敛的。