GuoXin Li's Blog

数字图像处理work-空间域/图像域-直方图均衡化/平滑空间滤波/锐化滤波器

字数统计: 991阅读时长: 4 min
2020/10/19 Share

数字图像处理作业01

直方图均衡化

直方图均衡化是将原图像通过某种变化,得到一幅灰度直方图为均匀分布的新图像的方法。

这种方法通常用来增加许多图像的全局对比度。增强局部亮度的对比对而不影响整体的对比度。

实现

离散的灰度图像{x},其中 表示灰度i出现的次数,有:

关于灰度i的概率密度函数

相应对 $p_x$ 的累积分布函数,有:

$fx(i) = \sum{j=0}^{i}P_x(j)$

再创建一个形式为 $y=T(x)$ 的变换,对于原始图像中每个值产生一个y

最后将进行值的映射和变换:

$y’ = y(max{x}-min{x}) + min{x}$

image-20201015133327561

应用:

  • 对于背景和前景太亮或者太暗的图像非常有用。
  • 例如对X光图像中更好地显示骨骼结构的曝光或曝光不足处理

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import cv2
import numpy as np
#read image
img = cv2.imread("preSny.jpg", 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("src", gray)

#call opencv-python histogram function: equalizeHist()
dst = cv2.equalizeHist(gray)
#show image
cv2.imshow("dst", dst)

cv2.waitKey(0)
cv2.destoryAllWindows()

平滑空间滤波器

作用:主要用于去除图像中一些不重要的细节。

分类:

  • 线性滤波器:均值滤波器
  • 非线性滤波器
    • 最大值滤波器
    • 中值滤波器
    • 最小值滤波器

image-20201015144348111

均值滤波器

均值滤波器属于线性滤波器,有:

  • 减小图像灰度的“尖锐”变化
  • 减小噪声
  • 但由于图像边缘是图像灰度尖锐变化引起的,所以存在边缘模糊问题

中值滤波器

非线性滤波器

基于滤波器所在图像区域中像素的排序,由排序结果决定的值代替中心像素的值

中值滤波器:用像素领域内中间值代替该像素(寻找像素周围内的中间值)

主要计算公式:

$R = mid{Z_k| k = 1,2,…n}$

主要用途:去除噪声

算法的特点

  • 去除噪声的同时,比较好的保留边的锐度和图像的细节(优于均值滤波器)
  • 能够有效去除脉冲噪声:以黑白点叠加在图像上

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import cv2
import numpy as np

#source image and resize image
img00 = cv2.imread("demoShot.png",1)
scale_percent = 45
img_width = int(img00.shape[1]*scale_percent / 100)
img_height = int(img00.shape[0]*scale_percent / 100)
dsize = (img_width, img_height)
img00 = cv2.resize(img00, dsize)

#medianBlur and Blur
img_medianBlur = cv2.medianBlur(img00, 7)
img_Blur = cv2.blur(img00,(7,7))

#cv2.imshow("image", np.hstack((img00,img_medianBlur,img_Blur)) )
cv2.imshow("originShot", img00)
cv2.imshow("medianBlur", img_medianBlur)
cv2.imshow("Blur", img_Blur)

cv2.waitKey(0)
cv2.destroyAllWindows()

锐化滤波器

主要作用:

  • 突出图像中的细节,增强被模糊的细节
  • 印刷中的层次强调,弥补扫描钝化
  • 超声探测成像,针对于分辨率低的图片

  • 图像识别中的边缘提取

  • 回复过度钝化,曝光不足的图像
  • 尖锐目标识别

采用的是用微分的方式进行锐化,有一阶微分滤波器和二阶微分滤波器

image-20201015143033332

梯度算子——一阶微分滤波器

边缘检测不是非常明显,边缘检测产生的噪声比较多

拉普拉斯算子——二阶微分滤波器

主要保留目标轮廓的锐化效果,边缘轮廓显示十分明显,适合于进行目标物体边缘检测

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import cv2
import numpy as np

img = cv2.imread("apple.png", cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (300,400))

# img = cv2.GaussianBlur(img, (3, 3), 0)
# img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#cv2.sobel derivative
sobel_x = cv2.Sobel(img,cv2.CV_64F, 1, 0, ksize = 5)
sobel_y = cv2.Sobel(img,cv2.CV_64F, 0, 1, ksize = 5)
#converting back to uint8
sobel_x = cv2.convertScaleAbs(sobel_x)
sobel_y = cv2.convertScaleAbs(sobel_y)
sobel_xy = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)

#cv2.scharr derivative
scharr_x = cv2.Scharr(img, cv2.CV_64F, 1, 0)
scharr_y = cv2.Scharr(img, cv2.CV_64F, 0, 1)
scharr_x = cv2.convertScaleAbs(scharr_x)
scharr_y = cv2.convertScaleAbs(scharr_y)
scharr_xy = cv2.addWeighted(scharr_x, 0.5, scharr_y, 0.5, 0)

#apply laplace
laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)

#show result
cv2.imshow("origin", img)
cv2.imshow("sobel", sobel_xy)
#cv2.imshow("scharr", scharr_xy)
cv2.imshow("laplacian", laplacian)

cv2.waitKey(0)
cv2.destroyAllWindows()
CATALOG
  1. 1. 数字图像处理作业01
    1. 1.1. 直方图均衡化
    2. 1.2. 平滑空间滤波器
    3. 1.3. 锐化滤波器