# HomomorphicFiltering **Repository Path**: saikaisa/HomomorphicFiltering ## Basic Information - **Project Name**: HomomorphicFiltering - **Description**: 同态滤波科研训练 HomomorphicFiltering - **Primary Language**: FORTRAN - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-14 - **Last Updated**: 2023-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HomomorphicFiltering 同态滤波科研训练 ## 处理步骤 1. **读取图像** 1. 通过 `imread` 函数读取原始图像 `src`,并用 `imshow` 函数将其显示在窗口中 2. 获取原始图像的行、列数 (`row`, `col`) 3. 创建一个与原始图像尺寸相同的空白图像 `dst`,用于存储滤波后的结果 (参数 `CV_8UC3`,将图像的数据类型转换为8位无符号整数,3通道) 2. **转换为 YUV 颜色空间** 1. 使用 `cvtColor` 函数将原始图像从 BGR 颜色空间转换为 YUV 颜色空间 (参数 `COLOR_BGR2YUV`) 2. 使用 `split` 函数将单个 YUV 图像分离为 3 个单通道图像数组 `yuv[3]`,其中 `yuv[0]` 存储 Y 通道 > YUV每个通道存储的内容: Y:亮度 U, V: 色度 3. **对 Y 通道进行同态滤波** 1. 使用 `convertTo` 函数将 Y 通道图像转换为浮点类型 (`CV_64FC1`),便于计算获得更好的精度 2. 对奇数尺寸大小的图像进行边界零填充,因为要进行离散余弦变换,图像的尺寸必须是偶数 3. 对每个像素点进行对数变换(要加 1,避免 ln0 的出现导致报错,同时最终结果减去 1) 4. 进行离散余弦变换 (DCT) > DCT变换将图像从空间域转换到频域,可以提取图像中的频域特征。 5. **使用高斯同态滤波器进行滤波**
高斯同态滤波器公式:
H(u,v) = (γH − γL) [1 − e-C[D2(u,v)/2D02]] + γL
**D0**:滤波半径 **D(u,v)**:点(x,y)到频谱图中心坐标的距离*(参数好像有点问题,怀疑是中心点坐标有误)* **gammaL** (γL):低频增益,取值在0和1之间 **gammaH** (γH):高频增益,需要大于1 **C**:规定曲线中间的偏斜度*(似乎值越大图像越暗)* 6. 将高斯同态滤波器的响应函数在频率平面的原点设置为1.0,保持图像的整体亮度不受滤波器的影响 7. 将滤波器应用于DCT变换后的图像,对应像素相乘 8. 进行逆离散余弦变换 (IDCT) 9. 指数变换回正常的 Y 通道图像 10. 将浮点类型的 Y 通道图像转换回8位无符号整型图像 (`CV_8UC1`) 4. **通道合并和图像输出** 1. 遍历像素,将同态滤波后的 Y 通道复制到一个新的临时 Mat 对象中。目的是确保对原 Y 通道图像的修改不会直接影响到后续的数据处理和内存管理。 > 通过使用 at 函数,能以像素级别访问图像的像素值 2. 使用 `merge` 函数将 YUV 通道三个图像,重新合并为一个完整的三通道图像 3. 将图像从 YUV 颜色空间转换回 BGR 颜色空间 (参数 `COLOR_YUV2BGR`) 4. 显示处理后的图像