java实现图像处理高通滤波_数字图像处理-频域滤波-高通/低通滤波

频域滤波

频域滤波是在频率域对图像做处理的一种方法。步骤如下:

f83d2f254719170e6083f6805ef64d25.png

滤波器大小和频谱大小相同,相乘即可得到新的频谱。

滤波后结果显示,低通滤波去掉了高频信息,即细节信息,留下的低频信息代表了概貌。常用的例子,比如美图秀秀的磨皮,去掉了脸部细节信息(痘坑,痘印,暗斑等)。高通滤波则相反。

高通/低通滤波

1.理想的高/低通滤波

顾名思义,高通滤波器为:让高频信息通过,过滤低频信息;低通滤波相反。

理想的低通滤波器模板为:

0e9423641dd598997eed1f81a1d98b5b.png

其中,D0表示通带半径,D(u,v)是到频谱中心的距离(欧式距离),计算公式如下:

4635724c50fbb478c446f8fbb94e8405.png

M和N表示频谱图像的大小,(M/2,N/2)即为频谱中心

理想的高通滤波器与此相反,1减去低通滤波模板即可。

36f931b3fd7d3fe0436d4a3e1fc12c2c.png

40380fb9110752d82ba6da9f3c010300.png

1355c3e2a7508b7101afe44bb078c16f.png

4a8d6937966885e5571da095b1a4fe16.png

部分代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#定义函数,显示滤波器模板

defshowTemplate(template):

temp= np.uint8(template*255)

cv2.imshow('Template', temp)return

#定义函数,显示滤波函数

defshowFunction(template):

row, col=template.shape

row= np.uint16(row/2)

col= np.uint16(col/2)

y=template[row, col:]

x=np.arange(len(y))

plt.plot(x, y,'b-', linewidth=2)

plt.axis([0, len(x),-0.2, 1.2])

plt.show()return

#定义函数,理想的低通/高通滤波模板

defIdeal(src, d0, ftype):

template= np.zeros(src.shape, dtype=np.float32) #构建滤波器

r, c =src.shapefor i inrange(r):for j inrange(c):

distance= np.sqrt((i - r/2)**2 + (j - c/2)**2)if distance

template[i, j]= 1

else:

template[i, j]=0if ftype == 'high':

template= 1 -templatereturn template

Ideal

2. Butterworth高/低通滤波

Butterworth低通滤波器函数为:

0d32dd66621df5841ab3b54fe65d8c65.png

从函数图上看,更圆滑,用幂系数n可以改变滤波器的形状。n越大,则该滤波器越接近于理想滤波器

fd8f77b31002c2d0aaff0915c68b396b.png

654ea29e495dc1782de890c9e2f608ea.png

1减去低通滤波模板即可得到高通滤波模板

b9dece61c46cf3b616b3ab6730a06f97.png

e81def910ad48f1ffc5d62dc8601a710.png

9345df772a20fa2a7adeea5fbe3bfb5c.png

9ffc4192ed12f6cff2ea8128172f1e12.png

部分代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#定义函数,巴特沃斯高/低通滤波模板

defButterworth(src, d0, n, ftype):

template= np.zeros(src.shape, dtype=np.float32) #构建滤波器

r, c =src.shapefor i innp.arange(r):for j innp.arange(c):

distance= np.sqrt((i - r/2)**2 + (j - c/2)**2)

template[i, j]= 1/(1 + (distance/d0)**(2*n)) #Butterworth 滤波函数

template[i, j] = np.e ** (-1 * (distance**2 / (2 * d0**2))) #Gaussian滤波函数

if ftype == 'high':

template= 1 -templatereturn template

Butterworth

3. Gaussian高/低通滤波

Guassian低通滤波器函数为:

b567baf85cf60a71f043e2e45c8427f3.png

1减去低通滤波模板即可得到高通滤波模板

831e024887fbb043110c029e443cdffa.png

38381dbd0aa66e3b8f9178d7cf6c12ce.png

9d1926e1d6439a3e6142ce2caff35f4d.png

aec5684e7539069c98a81246badad41d.png

3e6c95e5fb44c3068d4173d79155beb8.png

816a293210c1b598dcec07539ab51b6f.png

部分代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#定义函数,高斯高/低通滤波模板

defGaussian(src, d0, ftype):

template= np.zeros(src.shape, dtype=np.float32) #构建滤波器

r, c =src.shapefor i innp.arange(r):for j innp.arange(c):

distance= np.sqrt((i - r / 2) ** 2 + (j - c / 2) ** 2)

template[i, j]= np.e ** (-1 * (distance ** 2 / (2 * d0 ** 2))) #Gaussian滤波函数

if ftype == 'high':

template= 1 -templatereturn template

Gaussian

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值