图像处理3

目录

1、图像去噪(均值滤波、高斯滤波、中值滤波)

2、不同核大小的均值滤波

3、不同核大小的高斯滤波

4、不同核大小的中值滤波

5、图像修复方法1

6、图像修复方法2


1、图像去噪(均值滤波、高斯滤波、中值滤波)

# 导入opencv库
import cv2

# 读取图片,前面两点表示相对路径
img = cv2.imread('..\\images\\lena_noise.jpg ')

# 均值滤波
result_blur = cv2.blur(img, (3, 3))

# 高斯滤波
result_GaussianBlur = cv2.GaussianBlur(img, (3, 3), 0)

# 中值滤波
result_medianBlur = cv2.medianBlur(img, 3)

# 显示图像
cv2.imshow('original', img)
cv2.imshow('result_blur', result_blur)
cv2.imshow('result_GaussianBlur', result_GaussianBlur)
cv2.imshow('result_medianBlur', result_medianBlur)

# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

       高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,因此其中的脉冲噪声依然存在,所以图像呈现出颗粒感。同样的均值滤波也存在这种情况。而对于中值滤波器,其滤除脉冲噪声的效果比滤除高斯噪声的效果好,因此其图像不会呈现出很强的颗粒感,但由于存在高斯噪声,还是会存在一些模糊感

2、不同核大小的均值滤波

# 导入opencv库
import cv2

# 读取图片,前面两点表示相对路径
img = cv2.imread('..\\images\\lena_noise.jpg ')

# 均值滤波,核大小为3
result_blur_3 = cv2.blur(img, (3, 3))

# 均值滤波,核大小为5
result_blur_5 = cv2.blur(img, (5, 5))

# 均值滤波,核大小为7
result_blur_7 = cv2.blur(img, (7, 7))

# 均值滤波,核大小为9
result_blur_9 = cv2.blur(img, (9, 9))

# 均值滤波,核大小为11
result_blur_11 = cv2.blur(img, (11, 11))

# 显示图像
cv2.imshow('original', img)
cv2.imshow('result_blur_3', result_blur_3)
cv2.imshow('result_blur_5', result_blur_5)
cv2.imshow('result_blur_7', result_blur_7)
cv2.imshow('result_blur_9', result_blur_9)
cv2.imshow('result_blur_11', result_blur_11)

# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

3、不同核大小的高斯滤波

# 导入opencv库
import cv2

# 读取图片,前面两点表示相对路径
img = cv2.imread('..\\images\\lena_noise.jpg ')

# 高斯滤波,核大小为3
result_GaussianBlur_3 = cv2.GaussianBlur(img, (3, 3), 0)

# 高斯滤波,核大小为5
result_GaussianBlur_5 = cv2.GaussianBlur(img, (5, 5), 0)

# 高斯滤波,核大小为7
result_GaussianBlur_7 = cv2.GaussianBlur(img, (7, 7), 0)

# 高斯滤波,核大小为9
result_GaussianBlur_9 = cv2.GaussianBlur(img, (9, 9), 0)

# 高斯滤波,核大小为11
result_GaussianBlur_11 = cv2.GaussianBlur(img, (11, 11), 0)

# 显示图像
cv2.imshow('original', img)
cv2.imshow('result_GaussianBlur_3', result_GaussianBlur_3)
cv2.imshow('result_GaussianBlur_5', result_GaussianBlur_5)
cv2.imshow('result_GaussianBlur_7', result_GaussianBlur_7)
cv2.imshow('result_GaussianBlur_9', result_GaussianBlur_9)
cv2.imshow('result_GaussianBlur_11', result_GaussianBlur_11)

# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

4、不同核大小的中值滤波

# 导入opencv库
import cv2

# 读取图片,前面两点表示相对路径
img = cv2.imread('..\\images\\lena_noise.jpg ')

# 中值滤波,核大小为3
result_medianBlur_3 = cv2.medianBlur(img, 3)

# 中值滤波,核大小为5
result_medianBlur_5 = cv2.medianBlur(img, 5)

# 中值滤波,核大小为7
result_medianBlur_7 = cv2.medianBlur(img, 7)

# 中值滤波,核大小为9
result_medianBlur_9 = cv2.medianBlur(img, 9)

# 中值滤波,核大小为11
result_medianBlur_11 = cv2.medianBlur(img, 11)

# 显示图像
cv2.imshow('original', img)
cv2.imshow('result_medianBlur_3', result_medianBlur_3)
cv2.imshow('result_medianBlur_5', result_medianBlur_5)
cv2.imshow('result_medianBlur_7', result_medianBlur_7)
cv2.imshow('result_medianBlur_9', result_medianBlur_9)
cv2.imshow('result_medianBlur_11', result_medianBlur_11)

# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

       选择的核较小时,滤波效果不是很理想,但当核较大时,又会使图像变得模糊,因此要选择合适的核大小。从另一方面可以看出,滤波是以损失图片的清晰度为代价来滤除噪声

5、图像修复方法1

# 导入opencv库
import cv2

# 读取彩色原图
img_origin = cv2.imread('../images/lena.bmp')

# 读取待修复的彩色图像
img_inpaint = cv2.imread('../images/lena_inpaint.bmp ')

# 将图像转换为灰度图
img_origin_gray = cv2.cvtColor(img_origin, cv2.COLOR_BGR2GRAY)
img_inpaint_gray = cv2.cvtColor(img_inpaint, cv2.COLOR_BGR2GRAY)

# mask是原图的灰度图像与待修复的灰度图像的差距图像
mask = img_origin_gray - img_inpaint_gray

# 图像二值化的阈值设定
threshold = 20

# 对差距图像进行图像二值化。mask_binary是cv2.inpaint()的第二个参数,其中非零像素表示需要修复的区域
ret, mask_binary = cv2.threshold(mask, threshold, 255, cv2.THRESH_BINARY)

# 调用 cv2.inpaint()进行图像修补,分别采用两种不同的修补方式(第三个参数的大小对图像的修复效果也有影响)
dst_TELEA = cv2.inpaint(img_inpaint, mask_binary, 1, cv2.INPAINT_TELEA)
dst_NS = cv2.inpaint(img_inpaint, mask_binary, 1, cv2.INPAINT_NS)

# 检验修补后的图像与原图的差距(采用图像减法)
img_diff_TELEA = img_origin - dst_TELEA
img_diff_NS = img_origin - dst_NS

# 显示彩色原图
cv2.imshow("origin image ", img_origin)

# 显示待修复的彩色原图
cv2.imshow("inpaint image ", img_inpaint)

# 显示原图与待修复图像的差距图像
cv2.imshow("mask ", mask)

# 显示二值化后的差距图像
cv2.imshow("mask_binary ", mask_binary)

# 显示采用TELEA修补算法的后的图像
cv2.imshow("result image of TELEA ", dst_TELEA)

# 显示采用NS修补算法的后的图像
cv2.imshow("result image of NS ", dst_NS)

# 显示采用TELEA修补算法的后的图像与原图的差距图像
cv2.imshow("difference between origin and TELEA images ", img_diff_TELEA)

# 显示采用NS修补算法的后的图像与原图的差距图像
cv2.imshow("difference between origin and NS images ", img_diff_NS)

# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

6、图像修复方法2

# 导入opencv库
import cv2

# 读取彩色原图
img_origin = cv2.imread('../images/lena.bmp')

# 读取待修复的彩色图像
img_inpaint = cv2.imread('../images/lena_inpaint.bmp ')

# mask是原图与待修复图像的差距图像
mask = img_origin - img_inpaint

# 将差距图像转换为灰度图
mask_gray = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)

# 图像二值化的阈值设定
threshold = 20

# 对差距图像进行图像二值化。mask_binary是cv2.inpaint()的第二个参数,其中非零像素表示需要修复的区域
ret, mask_binary = cv2.threshold(mask_gray, threshold, 255, cv2.THRESH_BINARY)

# 调用 cv2.inpaint()进行图像修补,分别采用两种不同的修补方式(第三个参数的大小图像的修复效果也有影响)
dst_TELEA = cv2.inpaint(img_inpaint, mask_binary, 1, cv2.INPAINT_TELEA)
dst_NS = cv2.inpaint(img_inpaint, mask_binary, 1, cv2.INPAINT_NS)

# 检验修补后的图像与原图的差距(采用图像减法)
img_diff_TELEA = img_origin - dst_TELEA
img_diff_NS = img_origin - dst_NS

# 显示彩色原图
cv2.imshow("origin image ", img_origin)

# 显示待修复的彩色原图
cv2.imshow("inpaint image ", img_inpaint)

# 显示原图与待修复图像的差距图像
cv2.imshow("mask ", mask)

# 显示二值化后的差距图像
cv2.imshow("mask_binary ", mask_binary)

# 显示采用TELEA修补算法的后的图像
cv2.imshow("result image of TELEA ", dst_TELEA)

# 显示采用NS修补算法的后的图像
cv2.imshow("result image of NS ", dst_NS)

# 显示采用TELEA修补算法的后的图像与原图的差距图像
cv2.imshow("difference between origin and TELEA images ", img_diff_TELEA)

# 显示采用NS修补算法的后的图像与原图的差距图像
cv2.imshow("difference between origin and NS images ", img_diff_NS)

# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

以上两种方法只是在获取  mask_gray  时有差异

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁静_致远_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值