opencv + python 实现中值、最大值、最小值滤波
程序员文章站
2022-03-23 12:54:13
...
中值滤波:
中值滤波其实就是对目标像素及周边像素取中值后再填回目标像素来实现滤波目的的方法。
优点:抑制椒盐噪点效果很好,画面的清析度基本保持;
缺点:对高斯噪声的抑制效果不是很好。
最大值滤波:
最大值滤波其实就是对目标像素及周边像素取最大值后再填回目标像素来实现滤波目的的方法。
最大值滤波可以去除图像中的暗斑,同时也会使亮斑增大(膨胀);
最小值滤波:
最小值滤波其实就是对目标像素及周边像素取最小值后再填回目标像素来实现滤波目的的方法。
最小值滤波可以去除图像中的亮斑,同时也会增大暗斑(腐蚀)。
代码
import cv2 as cv
import numpy as np
import math
import copy
def spilt( a ):
if a/2 == 0:
x1 = x2 = a/2
else:
x1 = math.floor( a/2 )
x2 = a - x1
return -x1,x2
def original (i, j, k,a, b,img):
x1, x2 = spilt(a)
y1, y2 = spilt(b)
temp = np.zeros(a * b)
count = 0
for m in range(x1, x2):
for n in range(y1, y2):
if i + m < 0 or i + m > img.shape[0] - 1 or j + n < 0 or j + n > img.shape[1] - 1:
temp[count] = img[i, j, k]
else:
temp[count] = img[i + m, j + n, k]
count += 1
return temp
#中值滤波
def mid_functin(a, b, img):
img0 = copy.copy(img)
for i in range(0, img.shape[0]):
for j in range(2, img.shape[1]):
for k in range(img.shape[2]):
temp = original(i, j, k, a, b, img0)
img[i, j, k] = np.median(temp)
return img
#最大值滤波
def max_functin(a, b, img):
img0 = copy.copy(img)
for i in range(0, img.shape[0]):
for j in range(2, img.shape[1]):
for k in range(img.shape[2]):
temp = original(i, j, k, a, b, img0)
img[i, j, k] = np.max(temp)
return img
#最小值滤波
def min_functin(a, b, img):
img0 = copy.copy(img)
for i in range(0, img.shape[0]):
for j in range(2, img.shape[1]):
for k in range(img.shape[2]):
temp = original(i, j, k, a, b, img0)
img[i, j, k] = np.min(temp)
return img
def main():
img0 = cv.imread(r"noise.jpg")
mid_img = mid_functin(3, 3, copy.copy(img0) )
max_img = max_functin(3, 3, copy.copy(img0))
min_img = min_functin(3, 3, copy.copy(img0))
cv.imshow("original", img0)
cv.imshow("max_img",max_img)
cv.imshow("min_img",min_img)
cv.imshow("mid_img", mid_img)
cv.waitKey(0)
cv.destroyAllWindows()
if __name__ == "__main__":
main()
示例
原图:
中值滤波:
最小值滤波:
最大值滤波:
推荐阅读
-
理想高通滤波实现Python opencv示例
-
Python 实现中值滤波、均值滤波的方法
-
python+opencv实现高斯平滑滤波
-
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
-
理想高通滤波实现Python opencv示例
-
Python 实现中值滤波、均值滤波的方法
-
程序员代码面试指南 python实现(第一章 栈和队列 :最大值减去最小值小于或等于num的子数组数量)
-
初学python实现OpenCV之边缘保留滤波:高斯双边、均值迁移
-
python+opencv均值滤波,高斯滤波,中值滤波,双边滤波
-
基于OpenCV+Python的均值滤波,高斯滤波,中值滤波,双边滤波