数字图像的空间域滤波和频域滤波.docx
《数字图像的空间域滤波和频域滤波.docx》由会员分享,可在线阅读,更多相关《数字图像的空间域滤波和频域滤波.docx(15页珍藏版)》请在冰豆网上搜索。
数字图像的空间域滤波和频域滤波
数字图像的空间域滤波和频域滤波
一、实验环境
Pycharm2018.2Anaconda3-5.3
二、实验内容与要求
1.平滑空间滤波:
1)读出一幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图显示在同一图像窗口中。
2)对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,
要求在同一窗口中显示。
3)进行低通滤波,显示处理后的图像。
4)显示均值处理后的图像。
5)对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处理,要求在同一窗口中显示结果。
2.锐化空间滤波
1)读出blurry_moon.tif这幅图像,采用3X3的拉普拉斯算子w=[1,1,1;1-81;1,1,
1]对其进行滤波。
2)编写函数w=genlaplacian(n),自动产生任一奇数尺寸n的拉普拉斯算子,如5X5
的拉普拉斯算子
w=
[1
1
1
1
1
1
1
1
1
1
1
1
-24
1
1
1
1
1
1
1
3)分别采用
1
1
1
1
1]
5X5,
9X9,
15X
15和25X25大小的拉普拉斯算子对blurry_moon.tif进
zf(x,y)
彳行锐化滤波,并利用式
g(x,y)=
f(x,y)完成图像的锐化增强,观察其有
何不同,要求在同一窗口中显示。
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]
#随机生成噪声点位置
0,2)
foriinrange(num):
x=np.random.randint(0,row)
y=np.random.randint(0,col)
indicator=np.random.randint(
#灰度图像
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)
•sattPepper—□X■<-ie.i.m
2)对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,要求在同一窗口中显示。
加入椒盐噪声后图像的滤波:
imgl=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.destroyAIIWindows()
X
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)
□a■lowpassfiltering—□X
LWll.w
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')#默认彩色,另一种彩色bgrplt.title('img')
plt.xticks([]),plt.yticks⑪
plt.subplot(1,2,2),plt.imshow(blur,'gray')
plt.title('blur')plt.xticks([]),plt.yticks([])plt.show()
&Figure1—□X
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()
基Figure1—□X
medianBlurblur
2.锐化空间滤波
1)读出一幅图像,采用3X3的拉普拉斯算子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的拉普拉斯算子,如5X5
的拉普拉斯算子
w-[1
1
1
1
1
1
1
1
1
1
1
1-24
11
1
1
1
1
1
1
1
1
1
1]
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.destroyAIIWindows()
3)分别采用5X5,9X9,15X15和25X25大小的拉普拉斯算子对blurry_moon.tif进
行锐化滤波,并利用式完成图像的锐化增强,观察其有何不同,要求在同一窗口中显示。
代码:
importcv2
img=blurred=cv2.imread("D:
mote.jpg",0)
#5X5,9X9,15X15禾口25X25
blurred1=cv2.GaussianBlur(img,(blurred2=cv2.GaussianBlur(img,(blurred3=cv2.GaussianBlur(img,(blurred4=cv2.GaussianBlur(img,(
img5x5=img-blurred1img9x9=img-blurred2img15x15=img-blurred3img25x25=img-blurred4cv2.imshow("5x5",img5x5)cv2.imshow("9x9",img9x9)cv2.imshow("15x15",img15x15)cv2.imshow("25x25",img25x25)cv2.waitKey(0)
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.pyplotaspit
img=cv2.imread('D:
mote.jpg',0)
f=np.fft.fft2(img)#快速傅里叶变换算法得到频率分布
fshift=np.fft.fftshift(f)
si=np」og(np.abs(f))
s2=np」og(np.abs(fshift))
ph_f=np.angle(f)
ph_fshift=np.angle(fshift)plt.subplot(221),plt.imshow(s1,plt.subplot(222),plt.imshow(s2,plt.subplot(223),plt.imshow(ph_f,
'gray'),plt.title(
'gray'),plt.title(
'gray'),plt.title(
'originalmagnitude')
'centermagnitude')
'originalphase')
plt.subplot(224),plt.imshow(ph_fshift,plt.show()
'gray'),plt.title(
'centerphase')
'Figure1
origins!
n^dgn止uii亡
centernidgnuude
200
mo
4OC
IM
2*?
0
Oonninaf^iase0
IDO
20D
和0
也center^ase