python平滑滤波_【5】python-opencv3教程:图像平滑2(联合双边滤波平滑)

这篇博客介绍了如何使用Python的OpenCV3库实现联合双边滤波进行图像平滑。通过定义空间距离权重模板和相似性权重模板,对图像进行平滑处理,减少了噪声并保留了边缘细节。最后展示了原始图像和经过联合双边滤波平滑后的图像对比。
摘要由CSDN通过智能技术生成

第四节:图像平滑2

一:联合双边滤波

代码实现:

import numpy as np

import cv2

import math

def getClosenessWeight(sigma_g, H, W):

# 计算空间距离权重模板

r, c = np.mgrid[0:H:1, 0:W:1] # 构造三维表

r -= int((H-1) / 2)

c -= int((W-1) / 2)

closeWeight = np.exp(-0.5*(np.power(r, 2)+np.power(c, 2))/math.pow(sigma_g, 2))

return closeWeight

def jointBLF(I, H, W, sigma_g, sigma_d, borderType=cv2.BORDER_DEFAULT):

# 构建空间距离权重模板

closenessWeight = getClosenessWeight(sigma_g, H, W)

# 对I进行高斯平滑

Ig = cv2.GaussianBlur(I, (W, H), sigma_g)

# 模板的中心点位置

cH = int((H - 1) / 2)

cW = int((W - 1) / 2)

# 对原图和高斯平滑的结果扩充边界

Ip = cv2.copyMakeBorder(I, cH, cH, cW, cW, borderType)

Igp = cv2.copyMakeBorder(Ig, cH, cH, cW, cW, borderType)

# 图像矩阵的行数和列数

rows, cols = I.shape

i, j = 0, 0

# 联合双边滤波的结果

jblf = np.zeros(I.shape, np.float64)

for r in range(cH, cH+rows, 1):

for c in range(cW, cW+cols, 1):

# 当前位置的值

pixel = Igp[r][c]

# 当前位置的邻域

rTop, rBottom = r-cH, r+cH

cLeft, cRight = c-cW, c+cW

# 从 Igp 中截取该邻域,用于构建相似性权重模板

region = Igp[rTop: rBottom+1, cLeft: cRight+1]

# 通过上述邻域,构建该位置的相似性权重模板

similarityWeight = np.exp(-0.5*np.power(region-pixel, 2.0)) / math.pow(sigma_d, 2.0)

# 相似性权重模板和空间距离权重模板相乘

weight = closenessWeight * similarityWeight

# 将权重归一化

weight = weight / np.sum(weight)

# 权重模板和邻域对应位置相乘并求和

jblf[i][j] = np.sum(Ip[rTop:rBottom+1, cLeft:cRight+1]*weight)

j+=1

j = 0

i += 1

return jblf

if __name__ == '__main__':

I = cv2.imread('p2.jpg', cv2.IMREAD_GRAYSCALE)

# 将8位图转换为浮点型

fI = I.astype(np.float64)

# 联合双边滤波,返回值的数据类型为浮点型

jblf = jointBLF(fI, 33, 33, 7, 2)

jblf = np.round(jblf)

jblf = jblf.astype(np.uint8)

cv2.imshow('origin', I)

cv2.imshow('jblf', jblf)

cv2.waitKey(0)

cv2.destroyAllWindows()

输出结果:

图像平滑就这些算法  。。随后学到新方法再继续更新

下一节我们学习阈值分割。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值