数字图像的空间域滤波和频域滤波备课讲稿.docx

上传人:b****8 文档编号:10736847 上传时间:2023-02-22 格式:DOCX 页数:14 大小:3.68MB
下载 相关 举报
数字图像的空间域滤波和频域滤波备课讲稿.docx_第1页
第1页 / 共14页
数字图像的空间域滤波和频域滤波备课讲稿.docx_第2页
第2页 / 共14页
数字图像的空间域滤波和频域滤波备课讲稿.docx_第3页
第3页 / 共14页
数字图像的空间域滤波和频域滤波备课讲稿.docx_第4页
第4页 / 共14页
数字图像的空间域滤波和频域滤波备课讲稿.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数字图像的空间域滤波和频域滤波备课讲稿.docx

《数字图像的空间域滤波和频域滤波备课讲稿.docx》由会员分享,可在线阅读,更多相关《数字图像的空间域滤波和频域滤波备课讲稿.docx(14页珍藏版)》请在冰豆网上搜索。

数字图像的空间域滤波和频域滤波备课讲稿.docx

数字图像的空间域滤波和频域滤波备课讲稿

 

数字图像的空间域滤波和频域滤波

数字图像的空间域滤波和频域滤波

一、实验环境

Pycharm2018.2,Anaconda3-5.3

二、实验内容与要求

1.平滑空间滤波:

1)读出一幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图

显示在同一图像窗口中。

2)对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,

要求在同一窗口中显示。

3)进行低通滤波,显示处理后的图像。

4)显示均值处理后的图像。

5)对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处

理,要求在同一窗口中显示结果。

2.锐化空间滤波

1)读出blurry_moon.tif这幅图像,采用3×3的拉普拉斯算子w=[1,1,1;1–81;1,1,

1]对其进行滤波。

2)编写函数w=genlaplacian(n),自动产生任一奇数尺寸n的拉普拉斯算子,如5×5

的拉普拉斯算子

w=[11111

11111

11-2411

11111

11111]

3)分别采用5×5,9×9,15×15和25×25大小的拉普拉斯算子对blurry_moon.tif进

行锐化滤波,并利用式

完成图像的锐化增强,观察其有何不同,要求在同一窗口中显示。

4)采用不同的梯度算子对blurry_moon.tif进行锐化滤波,并比较其效果。

3.傅立叶变换

1)读出woman.tif这幅图像,对其进行快速傅立叶变换,分别显示其幅度图像和相位

图像。

仅对相位部分进行傅立叶反变换后查看结果图像。

2)仅对幅度部分进行傅立叶反变换后查看结果图像。

3)将图像的傅立叶变换F置为其共轭后进行反变换,比较新生成图像与原始图像的差

异。

三、实验过程

1.平滑空间滤波:

1)读出一幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图显示在同一图像窗口中。

椒盐噪声:

defsalt_pepperNoise(src):

dst=src.copy()

num=1000#1000个噪声点

ndim=np.ndim(src)

row,col=np.shape(src)[0:

2]

foriinrange(num):

x=np.random.randint(0,row)#随机生成噪声点位置

y=np.random.randint(0,col)

indicator=np.random.randint(0,2)

#灰度图像

ifndim==2:

ifindicator==0:

dst[x,y]=0

else:

dst[x,y]=255

#彩色图像

elifndim==3:

ifindicator==0:

dst[x,y,:

]=0

else:

dst[x,y,:

]=255

returndst

高斯噪声:

defaddGaussianNoise(image,sigma):

mean=0.0

row,col,ch=image.shape

gauss=np.random.normal(mean,sigma,(row,col,ch))

gauss=gauss.reshape(row,col,ch)

noisy=image+gauss

returnnoisy.astype(np.uint8)

2)对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,

要求在同一窗口中显示。

加入椒盐噪声后图像的滤波:

img1=cv2.imread("D:

\\mote.jpg",0)

img=img1[100:

300]

src=salt_pepperNoise(img)

cv2.imshow("origin",src)

dst=cv2.blur(src,(3,3))#均值滤波模板

cv2.imshow("blur",dst)

dst1=cv2.medianBlur(src,5)#中值滤波

cv2.imshow("medianBlur",dst1)

dst2=cv2.GaussianBlur(src,(3,3),0)#高斯滤波

cv2.imshow("GaussianBlur",dst2)

cv2.waitKey(0)

cv2.destroyAllWindows()

3)进行低通滤波,显示处理后的图像。

importcv2

importnumpyasnp

deffunction(img):

h,w=img.shape

newimg=np.zeros((h,w),np.uint8)

img2=np.fft.fft2(img)

fshift=np.fft.fftshift(img2)

st=fshift.copy()

h,w=fshift.shape

sh=h/2

sw=w/2

r=40

foriinrange(h):

forjinrange(w):

if((sh-i)*(sh-i)+(sw-j)*(sw-j))<=r*r:

newimg[i,j]=255

tmp=1

else:

tmp=0

st[i,j]=tmp*fshift[i,j]

sl=np.fft.ifftshift(st)

x2=np.fft.ifft2(sl)

x3=np.uint8(np.real(x2))

returnnewimg,x3

img=cv2.imread('D:

\\mote.jpg',0)

img1,img2=function(img)

cv2.imshow("image",img)

cv2.imshow("lowpassfiltering",img2)

cv2.waitKey(0)

4)显示均值处理后的图像。

代码:

importcv2

importmatplotlib.pyplotasplt

img=cv2.imread('D:

\\mote.jpg',0)#直接读为灰度图像

blur=cv2.blur(img,(3,5))#模板大小3*5

plt.subplot(1,2,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgr

plt.title('img')

plt.xticks([]),plt.yticks([])

plt.subplot(1,2,2),plt.imshow(blur,'gray')

plt.title('blur')

plt.xticks([]),plt.yticks([])

plt.show()

5)对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处

理,要求在同一窗口中显示结果。

代码:

importcv2

importmatplotlib.pyplotasplt

img=cv2.imread('D:

/img/salt.jpg',0)#直接读为灰度图像

blur=cv2.blur(img,(3,5))#模板大小3*5

mid=cv2.medianBlur(img,5)

plt.subplot(1,2,1),plt.imshow(mid,'gray')

plt.title('medianBlur')

plt.xticks([]),plt.yticks([])

plt.subplot(1,2,2),plt.imshow(blur,'gray')

plt.title('blur')

plt.xticks([]),plt.yticks([])

plt.show()

2.锐化空间滤波

1)读出一幅图像,采用3×3的拉普拉斯算子w=[1,1,1;1–81;1,1,

1]对其进行滤波。

#定义函数,实现拉普拉斯算子

defLaplace(src):

template=np.ones((3,3),dtype=np.float32)#模板

template[1,1]=-8.0

addBorder=cv2.copyMakeBorder(src,1,1,1,1,cv2.BORDER_REFLECT_101)

row,col=src.shape

dst=np.zeros((row,col),dtype=np.int16)

foriinrange(row):

forjinrange(col):

temp=addBorder[i:

i+3,j:

j+3]

dst[i,j]=np.sum(template*temp)

returndst

2)编写函数w=genlaplacian(n),自动产生任一奇数尺寸n的拉普拉斯算子,如5×5

的拉普拉斯算子

w=[11111

11111

11-2411

11111

11111]

importnumpyasnp

importpandasaspd

importcv2

fromscipyimportndimage

kernel_5x5=np.array([[1,1,1,1,1],

[1,1,1,1,1],

[1,1,-24,1,1],

[1,1,1,1,1,],

[1,1,1,1,1]])

img=cv2.imread("D:

\\mote.jpg",0)

k5=ndimage.convolve(img,kernel_5x5)

cv2.imshow("5x5",k5)

cv2.waitKey()

cv2.destroyAllWindows()

3)分别采用5×5,9×9,15×15和25×25大小的拉普拉斯算子对blurry_moon.tif进

行锐化滤波,并利用式完成图像的锐化增强,观察其有何不同,要求在同一窗口中显示。

代码:

importcv2

img=blurred=cv2.imread("D:

\\mote.jpg",0)

#5×5,9×9,15×15和25×25

blurred1=cv2.GaussianBlur(img,(5,5),0)

blurred2=cv2.GaussianBlur(img,(9,9),0)

blurred3=cv2.GaussianBlur(img,(15,15),0)

blurred4=cv2.GaussianBlur(img,(25,25),0)

img5x5=img-blurred1

img9x9=img-blurred2

img15x15=img-blurred3

img25x25=img-blurred4

cv2.imshow("5x5",img5x5)

cv2.imshow("9x9",img9x9)

cv2.imshow("15x15",img15x15)

cv2.imshow("25x25",img25x25)

cv2.waitKey(0)

随着属性值的增大,图像锐化增强

4)采用不同的梯度算子对blurry_moon.tif进行锐化滤波,并比较其效果。

代码:

importnumpyasnp

importcv2

src=cv2.imread("D:

\\mote.jpg",0)

#sobel算法

x=cv2.Sobel(src,cv2.CV_16S,1,0)

y=cv2.Sobel(src,cv2.CV_16S,0,1)

absX=cv2.convertScaleAbs(x)

absY=cv2.convertScaleAbs(y)

dst=cv2.addWeighted(absX,0.5,absY,0.5,0)

cv2.imshow('Sobel',dst)

#拉布拉斯算子

lap=cv2.Laplacian(src,cv2.CV_16S,3)

dst1=cv2.convertScaleAbs(lap)

cv2.imshow("Laplacian",dst1)

#Canny算子

can=cv2.Canny(src,30,120)

s=src-can

src1=cv2.GaussianBlur(s,(3,3),0)

cv2.imshow("can",src1)

cv2.waitKey(0)

3.傅立叶变换

1)读出woman.tif这幅图像,对其进行快速傅立叶变换,分别显示其幅度图像和相位

图像。

仅对相位部分进行傅立叶反变换后查看结果图像。

2)仅对幅度部分进行傅立叶反变换后查看结果图像。

3)将图像的傅立叶变换F置为其共轭后进行反变换,比较新生成图像与原始图像的差

异。

代码:

importcv2

importnumpyasnp

importmatplotlib.pyplotasplt

img=cv2.imread('D:

\\mote.jpg',0)

f=np.fft.fft2(img)#快速傅里叶变换算法得到频率分布

fshift=np.fft.fftshift(f)

s1=np.log(np.abs(f))

s2=np.log(np.abs(fshift))

ph_f=np.angle(f)

ph_fshift=np.angle(fshift)

plt.subplot(221),plt.imshow(s1,'gray'),plt.title('originalmagnitude')

plt.subplot(222),plt.imshow(s2,'gray'),plt.title('centermagnitude')

plt.subplot(223),plt.imshow(ph_f,'gray'),plt.title('originalphase')

plt.subplot(224),plt.imshow(ph_fshift,'gray'),plt.title('centerphase')

plt.show()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1