滤波
1:中值滤波:median=cv2.medianBlur(img,5)//5代表的是5×5为一个处理单位,中值滤波能够把所有噪音点一下子消除掉 2:均值滤波blur=cv2.blur(img,(3,3)) 3:方框滤波,基本和中值滤波一样,可以选择归一化 box=cv2.boxfilter(img,-1,(3,3),nomarlize=True) 4:高斯滤波aussian=cv2.GaussianBlur(img,(5,5),1)
图像阈值
1:简单阈值,如果像素点小于阈值,则设置为0,否则将其设置为最大值,第一个参数为源图像,第二个图像为阈值,第三个参数是分配给超过阈值的像素值的最大值,简单阈值类型有cv.THRESH_BINARY cv.THRESH_BINARY_INV cv.THRESH_TRUNC cv.THRESH_TOZERO cv.THRESH_TOZERO_INV exp: ret,thresh1 = cv.threshold(img,127,255,cv.THRESH_BINARY) ret,thresh2 = cv.threshold(img,127,255,cv.THRESH_BINARY_INV) ret,thresh3 = cv.threshold(img,127,255,cv.THRESH_TRUNC) ret,thresh4 = cv.threshold(img,127,255,cv.THRESH_TOZERO) ret,thresh5 = cv.threshold(img,127,255,cv.THRESH_TOZERO_INV)
2:自适应阈值,但这可能并非在所有情况下都很好,例如,如果图像在不同区域具有不同的光照条件。在这种情况下,自适应阈值阈值化可以提供帮助。在此,算法基于像素周围的小区域确定像素的阈值。 3.Otsu的二值化 输入图像为噪点图像。在第一种情况下,采用值为127的全局阈值。在第二种情况下,直接采用Otsu阈值法。在第三种情况下,首先使用5x5高斯核对图像进行滤波以去除噪声,然后应用Otsu阈值处理。了解噪声滤波如何改善结果。
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('noisy2.png',0)
# 全局阈值
ret1,th1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
# Otsu阈值
ret2,th2 = cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
# 高斯滤波后再采用Otsu阈值
blur = cv.GaussianBlur(img,(5,5),0)
ret3,th3 = cv.threshold(blur,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
# 绘制所有图像及其直方图
images = [img, 0, th1,
img, 0, th2,
blur, 0, th3]
titles = ['Original Noisy Image','Histogram','Global Thresholding (v=127)',
'Original Noisy Image','Histogram',"Otsu's Thresholding",
'Gaussian filtered Image','Histogram',"Otsu's Thresholding"]
for i in xrange(3):
plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],'gray')
plt.title(titles[i*3]), plt.xticks([]), plt.yticks([])
plt.subplot(3,3,i*3+2),plt.hist(images[i*3].ravel(),256)
plt.title(titles[i*3+1]), plt.xticks([]), plt.yticks([])
plt.subplot(3,3,i*3+3),plt.imshow(images[i*3+2],'gray')
plt.title(titles[i*3+2]), plt.xticks([]), plt.yticks([])
plt.show()
##
腐蚀
形态学: 1:腐蚀就是去掉一些图像中的刺 2:膨胀和腐蚀是互逆的
|