图像预处理——空间域处理(opencv卷积API)

目录

一、空间域处理

1.基于领域的卷积滤波变换

(1)、平滑均值滤波/卷积

(2)、平滑中值滤波/卷积

(3)、自定义过滤器卷积

(4)、平滑高斯滤波/卷积

(5)、梯度Prewitt滤波/卷积

(6)、梯度Sobel滤波/卷积

(7)、梯度Laplacian滤波/卷积

二、频率域处理


空间域处理

1.基于领域的卷积滤波变换

(1)、平滑均值滤波/卷积

        破坏了图像的细节使图像变得模糊,同时不能很好的去除噪声

def blur_demo(image):
    dst = cv.blur(image, (5, 5))
    cv.imshow("blur_demo", dst)

 

(2)、平滑中值滤波/卷积

中值滤波对降噪能起到很好的作用,同时尽可能保留图像的细节

        

def median_blur_demo(image):
    dst = cv.medianBlur(image, 5)
    cv.imshow("median_blur_demo", dst)

(3)、自定义过滤器卷积

def custom_blur_demo(image):
    #kernel = np.ones([5, 5], np.float32)/25
    kernel = np.array([[0, -1, 0],[-1, 5, -1],[0, -1, 0]], np.float32)
    dst = cv.filter2D(image, -1, kernel=kernel)
    cv.imshow("custom_blur_demo", dst)

  • (左)移位

  • 锐化

(4)、平滑高斯滤波/卷积

  1. 模拟人眼(离关注中心越远,精度越模糊),关注中心区域。有效的去除高斯噪声
  2. \sigma越小关注区域越集中
blur_1 = cv2.GaussianBlur(img,(5,5),0)#高斯滤波(5, 5)表示高斯矩阵的长与宽都是5,标准差取0

(5)、梯度Prewitt滤波/卷积

(6)、梯度Sobel滤波/卷积

一阶导数极值点的地方为图像中两个边缘变化最大的地方

import cv2 as cv
import numpy as np
def sobel_demo(image):
    grad_x = cv.Sobel(image, cv.CV_32F, 1, 0)
    grad_y = cv.Sobel(image, cv.CV_32F, 0, 1)
    # grad_x = cv.Scharr(image, cv.CV_32F, 1, 0)#比Sobel效果更明显,效果如第二幅图所示
    # grad_y = cv.Scharr(image, cv.CV_32F, 0, 1)
    gradx = cv.convertScaleAbs(grad_x)
    grady = cv.convertScaleAbs(grad_y)
    cv.imshow("gradient-x", gradx)
    cv.imshow("gradient-y", grady)

    gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0)
    cv.imshow("gradient", gradxy)

标题

 

sobelx = cv.Sobel(img,cv.CV_64F,1,0,ksize=5)#Sobel算子为边沿检测中常用的算子之一,Sobel 算子计算一阶、二阶、三阶或混合图像差分
sobely = cv.Sobel(img,cv.CV_64F,0,1,ksize=5)

(7)、梯度Laplacian滤波/卷积

二阶导数为0的地方为边缘变化最大处

  1. 团块检测:周边高于(低于)中心点
  2. 边缘检测:像素值快速变化的区域

import cv2 as cv
import numpy as np
def lapalian_demo(image):
    dst = cv.Laplacian(image, cv.CV_32F)#函数默认使用2D四领域的卷积核
    lpls = cv.convertScaleAbs(dst)
    # kernel = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])#自定义一个2D八领域的卷积核
    # dst = cv.filter2D(image, cv.CV_32F, kernel=kernel)
    lpls = cv.convertScaleAbs(dst)
    cv.imshow("lapalian_demo", lpls)

 

 

laplacian = cv.Laplacian(img,cv.CV_64F)#对图像求二阶导数,一般用于边缘突出,在边缘检测中应用为Laplacian滤波

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值