数字图像处理
更新: 2022-01-03 13:55:27
1. 采样和量化
********$ G=2^k $,k 的单位是比特。图像大小:长 x 宽 x k / 8,单位是字节。
例: 存储1幅32 × 32,16个灰度级的图需要 4 096 bit
2. 图像表示及存储格式
图像格式
无损压缩:PNG
存储东华:GIF
透明图:GIF、PNG
**OpenCV 图像 type: ****<font style="color:rgb(79, 79, 79);background-color:rgb(246, 248, 250);">CV_</font>****<font style="color:rgb(0, 102, 102) !important;"><</font>****<font style="color:rgb(79, 79, 79) !important;">bit_depth</font>****<font style="color:rgb(0, 102, 102) !important;">></font>****<font style="color:rgb(79, 79, 79);background-color:rgb(246, 248, 250);">(S|U|F)C</font>****<font style="color:rgb(0, 102, 102) !important;"><</font>****<font style="color:rgb(79, 79, 79) !important;">number_of_channels</font>****<font style="color:rgb(0, 102, 102) !important;">></font>**
1--bit_depth---比特数---代表8bite,16bites,32bites,64bites---举个例子吧--比如说,如 如果你现在创建了一个存储--灰度图片的Mat对象,这个图像的大小为宽100,高100,那么,现在这张 灰度图片中有10000个像素点,它每一个像素点在内存空间所占的空间大小是8bite,8位--所以它对 应的就是CV_8 2--S|U|F--S--代表---signed int---有符号整形 U--代表--unsigned int--无符号整形 F--代表--float---------单精度浮点型 3--C<number_of_channels>----代表---一张图片的通道数,比如: 1--灰度图片--grayImg---是--单通道图像 2--RGB彩色图像---------是--3通道图像 3--带Alph通道的RGB图像--是--4通道图像
例如:img.type = CV_8UC3,8位无符号,3通道
uchar* get_pixel(data, x, y) {
return (uchar*)img.data + y*img.step + x * 3
}
img.type = CV_32SC3,32位有符号,3通道
uchar* get_pixel(data, x, y) {
return (uchar*)img.data + y*img.step + x * 4 * 3
} step 是字节数
遍历:
function scan_pixel(data, width, height, x, y) {
unchar *px = data;
for (int yi = 0; yi < height; ++yi, row += step) {
unchar* px = now;
for(int xi = 0; xi < width; ++xi, px += nc){}
}
}
例题:(左手坐标系)
| ptr - step - 3 | ptr - step | ptr - step + 3 |
|---|---|---|
| ptr - 3 | ptr | ptr + 3 |
| ptr + step - 3 | ptr + step | ptr + step + 3 |
| p - step | ||
|---|---|---|
| ptr - 4 * 3 | p | p + 4 * 3 |
| p + step |
交叉存储 顺序存储

3. 基本的图像处理
(1)灰度变换
图像反转:L' = 255 - L
**亮度变换:**整体变亮或变暗
- 对数变换:
s = c * log(1 + r)其中,r表示原始图像的灰度级,s表示变换后的灰度级,c为常数。
- 指数变换:
S = c * r ^ gamma
`gamma``gamma``gamma`
**对比度:**亮的更亮,暗的更暗
实验里用的是 s = r * value,但是其实分段函数和S形变换更好。


(2)插值与重采样
最近邻

**双线性插值 **


float bilinear(float a, float b, float c, float dx, float dy) {
float h1 = a + dx * (b - a);** // = (1-dx)a + dxb**
float h2 = c + dx * (c - d);
return h1 + dy * (h2 - h1);
}
js 代码中通俗易懂的实现:<font style="color:rgb(77, 77, 77);">f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1)</font>
其中 u, v 是小数部分, i, j 是整数部分。参考资料
4. 直方图 均衡化
横轴 Level,竖轴数量

均衡化步骤:
- 统计出每个灰度数量 (包括数量是0的灰度!)
- 归一化求每个像素的概率
- 累加
- 乘以要转换的灰度,如 255
例题:

p(0)=2/16=1/8,p(1)=3/16,p(2)=1/8,p(3)=1/8,p(4)=1/8,p(6)=1/8,p(8)=1/8,p(16)=1/16
T(0)=round(15*1/8)=2
T(1)=round(15*(1/8+3/16))=5
T(2)=round(15*7/16)=7
T(3)=round(15*9/16)=8
T(4)=round(15*11/16)=10
T(6)=round(15*13/16)=12
T(8)=round(15*15/16)=14
T(9)=round(15*16/16)=15

5. 空间域图像滤波(平滑、锐化的滤波器)、图像梯度(Sobel, Laplacian)
(1)写出3 ∗ 3的均值滤波核
1 1 1
1 1 1
1 1 1
(2)中值滤波的原理,为什么能很好的去除椒盐噪声
中值滤波
其基本原理是把数字图像中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点,对于斑点噪声(speckle noise)和椒盐噪声(salt-and-pepper noise)来说尤其有用,因为它不依赖于邻域内那些与典型值差别很大的值。中值滤波器在处理连续图像窗函数时与线性滤波器的工作方式类似,但滤波过程却不再是加权运算。
(3)使给出用3 ∗ 3的均值滤波与中值滤波处理题目给定的图像结果
1、写出求梯度的标准表达式

2、 写出 sobel 算子,相比标准的梯度求解方式 sobel 算子有何优点?

3、sobel 算子有去噪能力,请根据你的理解,描述 SOBEL 算子和高斯滤波的关系。
高斯滤波:消除噪音的同时也使边缘变得模糊;
SOBEL 算子:消除噪音的同时使边缘锐化。
Sobel 算子是在一个坐标轴的方向上进行非归一化的高斯平滑,在另外一个坐标轴方向上进行差分处理。
1/ 写出线性滤波的一般形式

2/ 一个 wh 的图像,滤波核的大小为 77,求滤波用了多少次乘法?
49wh
3/ 针对 2,若滤波核的行列可分离,则最多会有多少次乘法?
14wh
求一副二值图像的边缘使用一阶导数好还是用二阶导数好,给出理由和求解方式
一阶导产生的边缘可以有较大的宽度,如斜坡具有持续的亮度,这对边缘位置的确定是不利的,因为在寻找边缘的时候,我们希望确定准确的边缘位置
二阶导在边缘处过零点,这是确定边缘的简单判别方式
二阶导对噪声敏感,因此一般的图像处理中的二阶导施行之前,需要对图像进行高斯滤波,先行去除噪声
6. 频域图像处理、傅里叶变换、高低通滤波器
傅里叶变换

在空间域滤波中,平滑滤波器算法简单,处理速度快,但在降噪同时使图像产生模糊,特别是在边缘和细节处,对点、线等细节较多的图像却不太合适。
在频域滤波中,去噪同时将会导致边缘信息损失,使图像边缘模糊,并且产生振铃效果。频域滤波算法复杂,计算速度慢,有微量振铃效果,图像平缓。
基本流程


7. 形态学图像处理(膨胀和腐蚀,开闭操作)
设输入的是二值图像,前景是1,背景是0
膨胀:根据算子 s, 在算子区域内,取 max,即把 0 变成 1
腐蚀:根据算子 s, 在算子区域内,取 min,即把 1 变成 0
开操作:先腐蚀再膨胀,可以把小连接给断开,给「打开」
闭操作:先膨胀再腐蚀,可以连接起来,给「闭合」
白色顶帽变换(white top-hat):
黑色顶帽变换(blacktop-hat):
他们的特点是什么?
整体亮度会变化
白色顶帽:
8. 图像分割(传统方法和深度学习方法)
1/ 传统分割算法
a. 基于阈值的****
**b. **
灌水
c.
c.
d.
a.
b. 基于区域选择
- R-CNN
- Fast R-CNN
- Faster R-CNN
- Mask R-CNN
- Mask Scoring R-CNN
c. 基于 RNN 的图像分割
e. ...
9. 卷积神经网络
构成、卷积层、BNN起的作用是什么,怎么来计算的
激活函数,为什么现在都用 xx 而不用 xx
怎么对参数进行更新
层数过多,越乘越小
ResNet
吴恩达 dp
卷积计算方式与不同框架语言中的名称

一个例子

Padding
Valid and Same convolutions
valid: no padding, n-f+1
Same ouput size === input size, n+2p-f+1,可以求解 n+2p-f+=n => p = (f-1)/2
Stride 步长
(n+2p-f)/2 + 1,向下取整 floor
三维卷积

多个 filters

单层卷积神经网络
计算过程

一些定义

Example ConvNet 卷积神经网络举例

Pooling layer: Max or average pooling

Neural Network example: 数字识别
( CONV-POOL-CONV-POOL-FC-FC-FC-SOFTMAX)


LeNet - 5
60k parameters

AlexNet
152 layers, 60M parameters, MUCH bigger,ReLU, Error 15%
效果比前者好

VGG-16
专注于构建卷积层的简单网络,138M parameters

ResNet
更新: 2022-01-03 13:55:27
原文: https://www.yuque.com/qer233/sdu_note/dip

