上传者: 35774446
|
上传时间: 2025-11-24 09:46:41
|
文件大小: 2.15MB
|
文件类型: PDF
在本篇计算机视觉实验报告中,学生王培钰主要任务是使用CImg库重写和封装Canny边缘检测算法,并对算法进行优化。Canny算法是计算机视觉领域中一种经典的边缘检测方法,它通过一系列步骤有效地提取图像中的边缘。以下是实验报告中涉及的关键知识点和实现过程的详细解释:
1. **Canny边缘检测算法**:Canny算法包含以下步骤:
- **灰度化**:将彩色图像转换为灰度图像,通过红、绿、蓝分量的加权平均完成。
- **高斯滤波**:使用高斯滤波器平滑图像,消除高频噪声,但保留边缘信息。这里使用了`gaussian_smooth()`函数,并通过`make_gaussian_kernel()`生成高斯核。
- **计算梯度**:通过计算一阶偏导数求得图像的梯度幅值和方向。这涉及到`derrivative_x_y()`函数,以及`angle_radians()`和`radian_direction()`来确定方向。
- **非极大值抑制**:通过比较当前像素点与其邻域内像素点的梯度值,抑制非边缘像素,以减少假阳性边缘。`non_max_supp()`函数实现此操作。
- **双阈值检测**:使用高低两个阈值确定边缘,低阈值用于连接边缘,高阈值用于去除噪声。`apply_hysteresis()`函数处理这一过程。
- **边缘连接与删除**:通过`canny_line()`函数将相邻边缘连成长线,`delete_line()`函数删除长度小于20的短线条。
2. **CImg库的使用**:CImg是一个开源的C++图像处理库,实验要求只使用CImg进行图像的读取、写入和处理。通过封装,确保了代码的简洁性和可读性。
3. **代码封装**:每个功能都封装为单独的函数,如`RGBtoGray()`、`gaussian_smooth()`等,便于代码复用和维护。
4. **参数测试与分析**:对不同参数(如高斯滤波的σ值、双阈值)进行测试,观察其对边缘检测结果的影响。这有助于理解算法的敏感性和适应性。
5. **测试与调试**:通过对每一步的结果进行可视化和数量统计(如边缘像素点的数量),验证算法的正确性和效果。例如,通过比较经过连线和删线处理后的像素点数量变化。
实验过程中,学生按照学号尾号的规则分配了需要改写的代码(Code0),并成功实现了Canny算法的各个步骤,包括图像预处理、边缘检测和后处理。测试表明,经过优化的Canny算法能够有效检测图像边缘,并能根据设定的参数调整边缘的精确度和连通性。这种实践加深了对Canny边缘检测算法的理解,并提高了编程能力。