数字图像的空间域滤波和频域滤波Word文档下载推荐.docx
《数字图像的空间域滤波和频域滤波Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字图像的空间域滤波和频域滤波Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
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:
dst[x,y,:
]=0
]=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('
\\mote.jpg'
img1,img2=function(img)
image"
img)cv2.imshow("
lowpassfiltering"
img2)
4)显示均值处理后的图像。
代码:
importmatplotlib.pyplotasplt
img=cv2.imread('
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,'
blur'
plt.show()
5)对参加椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处
/img/salt.jpg'
mid=cv2.medianBlur(img,5)
plt.subplot(1,2,1),plt.imshow(mid,'
)plt.title('
medianBlur'
2.锐化空间滤波
1)读出一幅图像,采用3×
#定义函数,实现拉普拉斯算子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)
2)编写函数w=genlaplacian(n),自动产生任一奇数尺寸n的拉普拉斯算子,如5×
importpandasaspd
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("
0)
k5=ndimage.convolve(img,kernel_5x5)
5x5"
k5)
cv2.waitKey()
3)分别采用5×
行锐化滤波,并利用式完成图像的锐化增强,观察其有何不同,要求在同一窗口中显示。
img=blurred=cv2.imread("
#5×
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
img5x5)
9x9"
img9x9)
15x15"
img15x15)
25x25"
img25x25)
随着属性值的增大,图像锐化增强
4)采用不同的梯度算子对blurry_moon.tif进展锐化滤波,并比拟其效果。
src=cv2.imread("
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'
#拉布拉斯算子lap=cv2.Laplacian(src,cv2.CV_16S,3)
dst1=cv2.convertScaleAbs(lap)
Laplacian"
#Canny算子can=cv2.Canny(src,30,120)
s=src-can
src1=cv2.GaussianBlur(s,(3,3),0)
can"
src1)
3.傅立叶变换
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,'
),plt.title('
originalmagnitude'
plt.subplot(222),plt.imshow(s2,'
centermagnitude'
plt.subplot(223),plt.imshow(ph_f,'
originalphase'
plt.subplot(224),plt.imshow(ph_fshift,'
centerphase'