优化Mat SRretinex(Mat& img, double sigma, double gain, double offset) { Mat log_I, log_I_blur, log_R, log_G, log_B, log_R_blur, log_G_blur, log_B_blur; vector<Mat> bgr_planes; split(img, bgr_planes); // 计算对数值 double eps = 1e-6; log(bgr_planes[0] + eps, log_B); log(bgr_planes[1] + eps, log_G); log(bgr_planes[2] + eps, log_R); // 高斯模糊 GaussianBlur(log_R, log_R_blur, Size(0, 0), sigma); GaussianBlur(log_G, log_G_blur, Size(0, 0), sigma); GaussianBlur(log_B, log_B_blur, Size(0, 0), sigma); // 计算对比度增益 log_I = (log_R + log_G + log_B) / 3.0; log_I_blur = (log_R_blur + log_G_blur + log_B_blur) / 3.0; Mat log_C = log_I - log_I_blur; double mean_C = exp(mean(log_C))[0]; double alpha = gain / mean_C; // 校正图像 Mat R = exp(alpha * (log_R - log_R_blur) - offset); Mat G = exp(alpha * (log_G - log_G_blur) - offset); Mat B = exp(alpha * (log_B - log_B_blur) - offset); R = min(max(R, 0.0), 255.0); G = min(max(G, 0.0), 255.0); B = min(max(B, 0.0), 255.0); vector<Mat> out_planes = { B, G, R }; Mat out_img; merge(out_planes, out_img); return out_img; }
时间: 2024-01-30 13:03:33 浏览: 90
pic2mat.rar_matlab_mat格式
这段代码是一个Matlab实现的SR Retinex算法的优化版,主要是对原算法进行了一些改进,提高了图像校正的效果和速度。
该算法的主要步骤如下:
1. 将输入图像拆分成RGB三通道。
2. 对每个通道进行对数变换。
3. 对每个通道的对数图像进行高斯模糊。
4. 计算图像的对比度增益,用于校正图像。
5. 对每个通道的对数图像进行校正,得到校正后的图像。
6. 对校正后的图像进行像素值限制,确保像素值在0-255之间。
7. 将三个通道的校正后的图像合并为一张输出图像。
该算法的优化主要包括以下几点:
1. 使用了高斯模糊来平滑对数图像,减少了噪声的影响。
2. 使用了对比度增益来校正图像,使得校正效果更加稳定。
3. 对校正后的图像进行了像素值限制,避免了像素值超出范围的问题。
4. 使用了向量化和平均值代替循环和求和的方式,提高了算法的运行速度。
总体来说,该算法可以有效地提高图像的质量,并且具有较高的计算效率。
阅读全文