中值滤波的定义,图像滤波的原理是,什么是图像的中值滤波法
中值滤波器【定义】中值滤波器是一种非线性信号处理方法,所以它既是一种非线性滤波器,又是一种统计排序滤波器。每个像素的灰度值被设置为该像素附近的窗口中所有像素的灰度值的中值。
本发明的中值滤波器对作为孤立噪声像素的椒盐噪声和脉冲噪声有很好的滤波效果,并能保持图像的边缘特征,不会使图像明显模糊。
中值滤波器用数字图像或数字序列中某一点附近的点的中值来代替该点的值,并使周围的像素值接近真实值,从而去除孤立的噪声点。例如:
[具体操作/流程]
使用带有奇数点的移动窗口将模板的中心与图表的像素位置对齐。读取模板下每个对应像素的灰度值/从小到大,从大到小;选择灰度序列中中心像素的灰度值。为模板中心的像素指定一个中间值。CV是
medianBlur函数
DST=cv2.medianblur(src,ksize))))))))).
参数描述:
1.need 1.src:过滤图像
2.ksize:内核的大小必须是大于1的奇数[例如,3、5、7…]
也可以自己写
median_Blur
函数。闭嘴,上菜。
[python代码]
importnumpyasnpimportcv 2 frompopimporttdeepcopyromilimportmagefromatplotlibimportplt # # # # SNR=0.5):SNR=SNR #指定信噪比size=img.size #总像素数# print(type)size)noise size=int(size *(1-SNR))get for iizize)noise size(:)随机点Xi=int(NP.random.uniform) 0,img . shape[1])XJ=int)NP . random . uniform)0 确定是否为白色255返回IMG # # # # # # # # # # #中值滤波# # # # # # # # # # # # # # # # # # # # # # # # # # # # #输入图像是彩色图像image _ copy=np.array(当img,copy=true(。 astype(NP . float 32)processed=NP . zeros _ like)Image _ 2))))652g=NP . zeros(filiter _ size * filiter _ size)b=NP . zeros)filiter _ size * filiter _ size:forjinrange(middle,Image _ copy . shape[1]-middle):count=0 #取出模板I middle 1)3360 for inrange()j middle 1):r[count]=Image _ copy[m][n][0]g[count]=Image _ copy
er _ size * filiter _ size/2)]已处理=NP。剪辑(已处理,0.255).astype(np.uint8)返回已处理的###############中值滤波# # # # # # # # # # # # # # # # # def median _ Blur _ gray(img,filiter_size=3): #当输入的图像为灰度图像image_copy=np.array(img,copy=True).astype(NP。float 32)已处理=NP。zeros _ like(image _ copy)middle=int(filiter _ size/2)for I in range(middle,image _ copy。shape[0]-middle):for j in range(middle,image _ copy。shape[1]-middle):temp=[]对于范围内的m(I-middle,i middle 1):对于范围内的n(j-middle,j middle 1):如果m-middle 0或m中间1 image_copy.shape[0]或n-中间0或n中1 image_copyastype(NP。uint 8)如果_ _ name _ _= _ _ main _ _ :img=input(请输入图像名称:)#默认是线类型img=cv2.imread(img) #plt.imshow显示cv2.imread读取的图像有色差发蓝的问题#重新整合r,g,b #img=Image.open(img) b,g,r=cv2。split(img)src _ img=cv2merge([r,g,b])img _ demo=deep copy(src _ img)SNR=float(input(请输入信噪比:))img _ salt=add _ salt _ noise(img _ demo,snr) filiter_size=int(input(请输入菲利特尔的大小:))中位数_模糊=中位数_模糊(img _模糊图像窗口名称子图(1,3,1)im show(src _ img)PLT。轴(关)#关掉坐标轴PLT。标题( src _ img )工厂。子情节(1,3,2)情节。im show(img _ salt)PLT。轴(关)#关掉坐标轴PLT。标题( img _ salt )工厂。子情节(1,3,3)情节。im show(median _ blur)PLT。轴(关)#关掉坐标轴PLT。标题( median _ blur )PLT。tight _ layout()#调整整体空白plt.subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=None,hspace=None) #调整子图间距plt.savefig(reult.png ,dpi=1000) plt.show()运行过程:
请输入图像名称:
whitetulip.jpg
请输入信噪比:
0.99
请输入过滤器的大小:
3
结果显示:
if _ _ name _ _== _ _ main _ _ :img=input(请输入图像名称:)#默认是线类型img=cv2。im read(img)img _ gry=cv2。CVT颜色(img,cv2 .COLOR_BGR2GRAY) #plt.imshow显示cv2.imread读取的图像有色差发蓝的问题#重新整合r,g,b #img=Image.open(img) b,g,r=cv2。split(img)src _ img=cv2merge([r,g,b])img _ demo=deep copy(img _ gry)SNR=float(input(请输入信噪比:))img _ salt=add _ salt _ noise(img _ demo,snr) filiter_size=int(input(请输入菲利特尔的大小:))median _ Blur=median _ Blur _ gray(img图像窗口名称plt.subplot(1,3,1) plt.imshow(img_gry,cmap=gray) plt.axis(off) #关掉坐标轴PLT。标题( img _ gry )计划。subplot(1,3,2) plt.imshow(img_salt,cmap=gray) plt.axis(off) #关掉坐标轴PLT。标题( img _ salt )工厂。subplot(1,3,3) plt.imshow(median_blur,cmap=gray) plt.axis(off) #关掉坐标轴PLT。标题( median _ Blur )PLT。tight _ layout()#调整整体空白plt.subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=None,hspace=None) #调整子图间距plt.savefig(reult.png ,dpi=1000) plt.show()运行过程:
请输入图像名称:
whitetulip.jpg
请输入信噪比:
0.99
请输入过滤器的大小:
3
结果显示: