最近买了台相机, 出去拍了一些照片, 然后突然想到AI来做照片的处理,优化等. 所以找了一些课程来学习一下图像处理的基础知识.
目前从这些课程中学习:
https://www.bilibili.com/video/BV1Kh411X7Qv?p=3
https://www.bilibili.com/video/BV1R84y1f79o?p=1
https://www.bilibili.com/video/BV1tT4y1Y7Ak/?spm_id_from=333.788&vd_source=f7b0753424ba1b445914c36a2cbf1439

基础概念

像素

一张图片在计算机中使用二维数组表示array[m][n],二维数组的的大小m*n就表示照片的像素
相同的照片尺寸下,一张图片的像素越高,则显示的细节越多。
以这个照片为例,左侧图片的像素为2*2,右侧照片像素为4*4, 当放大某个细节时,右侧照片能给出更多的细节。

灰度值

二维数组中填充值的范围,对于黑白照片,灰度值的范围是0-255. 白色为255,黑色为0.
array[m][n]=k, 0<=k<=255

直方图

查看图片中灰度值的分布情况,横坐标是灰度值,纵坐标表示该灰度值出现的频率。

要注意的是,一个照片只有一个直方图,但一个直方图并不对应唯一的一张照片

使用直方图可以直观的展示出图像中各个灰度值的分布情况,占比情况。

图像增强

  • 灰度变换
  • 代数运算
  • 空间域滤波
  • 频域滤波

    灰度变换

  • 简单,常用的空间域图像增强方法
  • 对输入图像像素的灰度级进行变换
    $s=f(r)$, r/s 输入/输出灰度级

f(): 灰度变换函数,这个函数可以是线性变换, 也可以是非线性变换.

线性变换

$s = Ar+B$
当A>1时, 相当于做灰度拉伸, 变换完的图像会比原来的图片亮.
当A<1时, 相当于做灰度压缩, 变换完的图像会比原来的图片暗.

在线性变换中, 还可以进行分段线性变换
$$
s=
\begin{cases}
f1(x), \quad 0 <r<a \
f2(x), \quad a\leq r< b \
f3(r), \quad b\leq r< N
\end{cases}
$$

可以对感兴趣的灰度区域进行突出, 对不感兴趣的灰度区域进行抑制.

非线性变换

对数变换

$s = c * log(1+r)$
在灰度级比较小(暗)时做拉伸, 在灰度值大(亮)时做压缩, 可以使暗的图像更加亮

幂次变换

$s = c * r^n$
在n>1时
在灰度值比较大(亮)时做拉伸,在灰度值小(暗)时做压缩
在n<1时
在灰度级比较小(暗)时做拉伸, 在灰度值大(亮)时做压缩

直方图均衡

假设我们使用函数f()来对图像做灰度变换, 那么变换公式为: $D_B=f(D_A), D_A:变换前的灰度值,D_B变换后的灰度值$
我们使用$H(D)$表示灰度直方图, 那么在使用f()做变化之后, 变换后图像的灰度直方图为:
$$H_B(D_B)=\frac{H_A(D_A)}{f\prime(D_A)}$$
灰度变换后图像直方图是:变换前直方图变化函数导数之比

直方图均衡是希望将图像的

  • 每个灰度级都拥有像素
  • 直方图分布均匀
    如果要达到这个要求, 那么就需要使得
    $$H_B(D_B)=\frac{A_0}{D_m} \quad \quad A_0代表图像像素总数,D_m代表灰度级$$
    而我们又知道
    $$H_B(D_B)=\frac{H_A(D_A)}{f\prime(D_A)}$$
    所以我们可以推导出f()的表达式, 即:
    $$D_B=f(D_A)=\frac{D_m}{A_0}* \sum_{0}^{D_A}H_A(D_A)$$

    代数运算

  • 加法运算
  • 减法运算
  • 乘法运算

    加法运算

    两幅或多幅图像相加
    $C(x,y)=A(x,y)+B(x,y)$

可以用来去除叠加性噪声

减法运算

两幅图像相减
$C(x,y)=A(x,y)-B(x,y)$

可以用来

  • 分割特定区域
  • 检测场景变化 (通过前后图像相减, 得到变化的值)

乘法运算

两幅图像相乘
$C(x,y)=A(x,y)*B(x,y)$

可以用来获取图像中特点的部分

空间域滤波

$$y(j,i)=\sum_{m}\sum_{n}h(m,n)x(j+m,i+n)$$
均值滤波器:
$$h(m,n) =
\left[
\begin{matrix}
1 & 1 & 1 \
1 & 1 & 1 \
1 & 1 & 1 \
\end{matrix}
\right]
*
\frac{1}{9}
$$
高斯低通滤波器:
$$h(m,n) =
\left[
\begin{matrix}
1 & 2 & 1 \
2 & 4 & 2 \
1 & 2 & 1 \
\end{matrix}
\right]
*
\frac{1}{16}
$$
可以使图像平滑

中值滤波器
先邻域内像素(包括原像素)灰度排序, 然后取中间值
它可以

  • 使突出的点更接近它周边的点
  • 消除孤立的亮度或暗点
    去除噪声的同时, 比较好的保留边缘
    能够有效去除脉冲噪声

高通滤波
使图像锐化

  • 突出图像的细节特征
  • 增强图像模糊的边缘
  • 增强高频
  • 突出边缘

一阶

  • Robert算子
  • Prewitt算子
  • Sobel算子
    二阶
  • Laplace算子

一阶导数可以检测图像中的某像素点是否在边缘上
二阶导数可以判断一个边缘像素点在亮的一侧还是在暗的一侧