# Summer-finalwork **Repository Path**: BodanC/summer-finalwork ## Basic Information - **Project Name**: Summer-finalwork - **Description**: 暑期课程大作业 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-16 - **Last Updated**: 2021-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Summer-finalwork 北京航空航天大学数学科学学院2018级暑期实习大作业 #### 项目介绍 对灰度图像做最优二值变换 * 将灰度图读取,为矩阵 $A_{n*n}={a_{i,j}}$ ,其中每个元素 $a_{i,j}=0,1,\cdot,255$; * 取两个整数 ${c_1,c_2}$ ,对矩阵 $A$ 做数值转换: $a_{i,j}^t=c_1\ or\ c_2$ ;(策略自定义) * 寻找最小的整数组(或实数组) $c_1,c_2$ ,使变换矩阵 $A^t$ 与原矩阵 $A$ 差的2范数最小,即: $\min |A^t-A|\_2=\sum\_{i,j}|a\_{i,j}^t-a\_{i,j}|^2$ * 对矩阵 $A^t$ 做图像输出。 #### 代码架构 本项目基于 opencv 库的 `C++` 代码完成,主程序 `main.cpp` ,编译及运行在 terminal 中输入 ``` make -j2 ./main.cpp ``` #### 处理思路 * 读入图像,转化为灰色单通道; * 对灰度图像进行二值化处理,本代码采用 OTSU 大律化算法,得到二值化阈值; * 二值化处理之后,目标函数是二次函数,利用数值解法或者最速下降法一次迭代得到 $c_1,c_2$ 的值 * 输出 #### 处理结果 采用平均灰度阈值和 OTSU 阈值,对 `Smalllena.jpg` 的结果如下: ``` image Rows=512 Cols=512,Channals=1 option=Aver thre=95 c1=58 c2=131 ans=156227387 option=OTSU thre=93 c1=56 c2=130 ans=156083192 ``` 输入图 ![SmallLena.jpg](img/SmallLena.jpg) 灰度图 ![Lenagrey.png](img/Lenagrey.png) 平均阈值输出图像 ![solve0](img/solve0.jpg) OTSU 阈值输出图像 ![solve1.jpg](img/solve1.jpg)