0
点赞
收藏
分享

微信扫一扫

【Java系列】Mybatis-Plus 使用介绍二

在这里插入图片描述

1.概念介绍

低通滤波:低通滤波可以去除图像的噪音或平滑图像。
高通滤波:可以帮助查找图像的边缘。
噪音:即对一幅图像的产生负面效果,过暗或过亮的部分,一幅图像中,低于或高于某个像素点的值,都可以认为是噪音。


卷积核:即用来滤波的矩阵,卷积核一般为奇数,如3×3、5×5、7×7等;
锚点:卷积核最中间的坐标点。
卷积核越大,卷积的效果越好,但是计算量随之也会增大。
边界扩充:当卷积核大于1,并且不进行边界扩充,输出尺寸相应缩小、当卷积核一标准方式进行边界扩充,则输出的空间尺寸与输入相等。
在这里插入图片描述
下面的为原图像,上面为输出图像,灰色为卷积核,虚线为图像扩充

2. 图像卷积

filter2D()

kernel:是一个矩阵
在这里插入图片描述

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')

# 创建一个5*5的卷积核
kernel = np.ones((5, 5), np.float32) / 25
img2 = cv2.filter2D(img, -1, kernel)

# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)

cv2.waitKey(0)

经过图像处理后,看着变模糊了,更平滑了
在这里插入图片描述

3. 低通滤波器

filter2D接口需要我们自己定义卷积核,如何设置一个适合的卷积核,也成为了一个难题,为此OpenCV提供了一系列的滤波器,每个滤波器都有自己的专用卷积核,这样d大大减轻了使用人员的负担。

3.1 方盒滤波和均值滤波

boxFilter()

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')

# 方盒滤波(当为True时)变成均值滤波,当为False时,就只加和不变化,超过255的结果设置为255
img2 = cv2.boxFilter(img, -1, (5, 5), normalize=True)
img3 = cv2.boxFilter(img, -1, (5, 5), normalize=False)
# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)

cv2.waitKey(0)

在这里插入图片描述

blur()

3.2 高斯滤波(高斯噪音)

在这里插入图片描述

import cv2
import numpy as np

img = cv2.imread('./image/Gaussian.png')

# 高斯去噪
img2 = cv2.GaussianBlur(img, (3, 3), 0)

# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)

cv2.waitKey(0)

在这里插入图片描述

3.3 中值滤波(胡椒噪音)

import cv2
import numpy as np

img = cv2.imread('./image/median.png')

# 胡椒噪声
img2 = cv2.medianBlur(img, 5)

# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)

cv2.waitKey(0)

3.4 双边滤波

双边滤波的作用::图像去噪保边,对相关分析的结果有较大的影响,对于裂缝比较强,噪声比较少的图像来说,可以将去噪的程度放大,对以后的相关分析的结果就会有更少的噪声。对于噪声不是很集中的图像,并有较多细节的图像,增加保边的效果,让相关分析及后续进行进一步的结构处理,去噪。

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')


# 双边滤波
img2 = cv2.bilateralFilter(img, 5, 20, 50)

# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)

cv2.waitKey(0)

在这里插入图片描述

4. 高通滤波器

允许高于某个值的通过而阻断低于该值的滤波器。主要是有保留边缘的功能。常见的高通滤波器有Sobel(索贝尔)、Scharr(沙尔)、Laplacian(拉普拉斯)。

4.1Sobel(索贝尔)(高斯)

可以改变卷积核大小

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')


# 索贝尔
dx = cv2.Sobel(img, -1, 1, 0, ksize=3)
dy = cv2.Sobel(img, -1, 0, 1, ksize=3)

# dst = dx+dy
dst = cv2.add(dx,dy)
# 展示图像
cv2.imshow('img', img)
cv2.imshow('dx', dx)
cv2.imshow('dy', dy)
cv2.imshow('dst', dst)

cv2.waitKey(0)

在这里插入图片描述
一幅图的边缘被很好的分割出来。

4.2 Scharr(沙尔)

与Sobel类似,只不过使用的ksize值不同,Scharr不能改变卷积核的大小,只能是3*3的。同样只能求一个方向上的边缘。

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')


# # 索贝尔,当ksize=-1时,就是沙尔
# dx = cv2.Sobel(img, -1, 1, 0, ksize=-1)
# dy = cv2.Sobel(img, -1, 0, 1, ksize=-1)

dx = cv2.Scharr(img, -1, 1, 0)
dy = cv2.Scharr(img, -1, 0, 1)

# dst = dx+dy
dst = cv2.add(dx,dy)
# 展示图像
cv2.imshow('img', img)
cv2.imshow('dx', dx)
cv2.imshow('dy', dy)
cv2.imshow('dst', dst)

cv2.waitKey(0)

在这里插入图片描述

4.3 Laplacian(拉普拉斯)

Laplacian可以同时求两个方向上的边缘,但是对噪音比较敏感,一般需要先进行去噪再调用Laplacian。

在这里插入图片描述
卷积核大小为5*5的结果

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')


# # 索贝尔,当ksize=-1时,就是沙尔
# dx = cv2.Sobel(img, -1, 1, 0, ksize=-1)
# dy = cv2.Sobel(img, -1, 0, 1, ksize=-1)

# dx = cv2.Scharr(img, -1, 1, 0)
# dy = cv2.Scharr(img, -1, 0, 1)

dst = cv2.Laplacian(img, -1, ksize = 5)

# dst = dx+dy
# dst = cv2.add(dx,dy)
# 展示图像
cv2.imshow('img', img)
# cv2.imshow('dx', dx)
# cv2.imshow('dy', dy)
cv2.imshow('dst', dst)

cv2.waitKey(0)

4.4 Canny

使用5*5高斯滤波消除噪声,可以计算图像的四个方向上的边缘(0,45,90,135),取局部的最大值,多了一个阈值计算。高于阈值我们认为是边缘,低于阈值就不是边缘,显然A为边缘,如果,但是B和C介于最大值最小值之间,BC既不是边缘也是边缘,但是C与A在一条直线上,所以C也是边缘。

在这里插入图片描述

import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')


# canny
dst = cv2.Canny(img, 100, 200)

cv2.imshow('img',img)
cv2.imshow('dst',dst)

cv2.waitKey(0)

在这里插入图片描述

以上就是关于滤波器的基本介绍,详细信息还需读者去自己学习,大家有问题欢迎在评论区讨论。

举报

相关推荐

0 条评论