周志 8.2-8.9
周志 8.2-8.9

周志 8.2-8.9

学习内容

方向计划完成情况
CV小波变换,图像分割完成
编程实现小波变换,图像分割小波变换未完成
数学矢量场,旋转场,散度场,张量场放弃

CV:

小波变换

预处理:

为方便计算和学习,使用PS创建一张256*256,8bit的灰度图像

小波变换和图像小波变换(大坑)_(:з」∠)_

(一下部分大都在记载踩坑心得)

看清华大学出版社的《数字图像处理》课本,似懂非懂;看了两遍,好像懂了,但是算法层面好像没讲?感觉不对啊,不可能把一整行数据传入小波基的解析表达式和尺度函数啊!!!

得了,我明天把这章从头到尾连公式都挨个推一遍,要么是我脑子有问题要么是这书有问题!!!(╯‵□′)╯︵┻━┻

看了三遍,得出结论,课本的“二维小波离散变换”知识点,未指明所用的高频滤波器和低频滤波器。在P161对Haar小波的解析表达式和尺度函数与冈萨雷斯的教材完全不一样(P298)

冈萨雷斯的教程中,Haar的函数

冈萨雷斯提供了一个不错的例题,该例题使用了Harr小波,但是实际使用了一个4*4的变换矩阵H4:

关于Haar小波,两本书的内容不一样,咋办?没错,求助互联网

https://zh.wikipedia.org/zh-sg/%E5%93%88%E7%88%BE%E5%B0%8F%E6%B3%A2%E8%BD%89%E6%8F%9B

在Wikipedia上找到了冈萨雷斯提到的“矩阵”,而且有N=2、4、8的三种矩阵

看着看着感觉不对劲,中文版wiki翻译不全,部分资料没有。

英文wiki里面的例子和中文不大一样,H4提了个1/2,感觉没啥用啊?

通过英文wiki的栗子,我好像学会了Haar小波变换

重新回到冈萨雷斯的课本。在P309的例7.8中,提到W1和w2w3w4(那个符号打不出来)分别对应H4的1234行

上面的公式对应H4第一行;下面对应H4234行

在冈萨雷斯P314例7.10 计算一维快速小波变换中,出现了清华课本中的Haar表达式和尺度函数。

随后发现,看不懂例题(╯‵□′)╯︵┻━┻

冈萨雷斯学到了“一维快速小波变换”,终于看到了清华课本中的公式:

这是被小波困扰的第四天,在本章投入了很多时间精力,产出令人沮丧地太低,这个知识点此时已经没有学习的必要了,暂时放弃。


↑↑↑我是象征着高产的分界线(*^▽^*) ↑↑↑

嵌入式零树小波编码

这个还是相对简单的,由于在上一节耽误太多时间,因此没有使用代码实现。当然,课本中也存在少许看不懂的地方,比如P165 “除最高品子带以外的其余子带的系数都有四个孩子”,我百思不得其解,为啥我怎么数都是仨孩子啊?第四个孩子是谁家的?

关于小波去噪,课本只用了两页左右的篇幅介绍,因此我也浅尝辄止。

图像分割

在本章节,学习了图像分割的基本概念,基于边缘检测的图像分割(Hough变换),基于阈值的图像分割(阈值化分割、半阈值化分割)

基于双峰型直方图的阈值选取(利用极大值极小值、双峰型直方图谷底阈值的选取,最小误差法),其他阈值选取方法(全局阈值、类二值图像的阈值选取、迭代式阈值选取)

基于跟踪的图像分割:轮廓跟踪法,光栅跟踪法

基于区域的图像分割:区域生长法,合并分裂法,

代码展示

阈值化图像分割

源码:https://github.com/Sirlanri/cv-practice/blob/4c767afc4138ec85be12cb9e1621aa9780a40ff4/cv-practice/threshold.cpp#L36

利用阈值化提取物体轮廓,设置了一个滑动块,可以随时手动调节灰度阈值

灰度阈值15
灰度阈值33
灰度阈值86

半阈值化分割

和阈值化分割很像,只不过把保留的部分设置为原灰度值,可以处理多值图像。源码:https://github.com/Sirlanri/cv-practice/blob/758597930541889bbfa444ecb41ef78830826832/cv-practice/threshold.cpp#L54

基于双峰形直方图的阈值选取

首先,这个双峰形直方图不多啊,于是乎自己用PS画了个,勉勉强强满足双峰

由于从未系统学习过C++,在编程过程中遇到了小麻烦,于是转而深入学习C++指针相关的知识。关键点:指针数组、数组指针

说实话,我个人不喜欢C/C++ 🙁

这个算法由两个函数组成:生成直方图数组的generateHistogram函数、寻找谷底和k值的findThresByMaxMin函数。源码:https://github.com/Sirlanri/cv-practice/blob/758597930541889bbfa444ecb41ef78830826832/cv-practice/threshold.cpp#L118

可能是由于PS绘制的图片过于极端,存在某个数值为0的灰度阶,同时不是严格的双峰形,导致结果有点奇怪?

类二值图像的阈值选取

使用滑块输入“文字百分比”,通过文字百分比确定阈值。源码:https://github.com/Sirlanri/cv-practice/blob/4e0953d0adf2f3d851d1a9643bef10550eb80975/cv-practice/threshold.cpp#L217

步骤:计算直方图,确定对应百分比的灰度值,进行阈值化分割

50%
30%
14%

迭代式阈值选取

通过不断迭代的方式逼近合适的阈值。源码:https://github.com/Sirlanri/cv-practice/blob/373195ac976d9fa6fde4fb578c5bcd4e0f0322cd/cv-practice/threshold.cpp#L236

疑问:这个是不是只针对双峰图?

光栅跟踪法

为了方便和直观,没有实际测试图像,而是使用课本提供的矩阵,方便校验对错。源码:https://github.com/Sirlanri/cv-practice/blob/e1b08aae4c6acad00563762d95524a95eb93795e/cv-practice/trackSeg.cpp#L75

运行结果

数学:

问题很大,完成情况差,只了解了一点点皮毛。看了一些视频和中英文资料,仍没搞懂…

原因:未接触过相关知识;未了解其前置知识点

故暂时放弃相关知识点

总结

本周再次转变了学习方式,采用“深度优先”策略,不追求进度,追求学习的深度,并手写一切代码。

从结果看,对我而言,这种方式投入大产出很小,是不合适的

本周头发都掉的更多了(;´༎ຶД༎ຶ`)

直至开学前,采用“广度优先”学习方法,用最快的速度学习更多的知识,根据边际效应递减原理,掌握5成即可(了解,有啥用,怎么用),跳过数学推导部分。后续编程实践中,用到了某个算法,再进行深度的学习,推导其数学原理。研1上学期,可以学的很少,但要尽可能学会学习,寻找适合自己的学习方式

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注