图像增强,ssr的python运行

你好,我是要做本科毕设,刚刚涉及图像增强方面的,在我的论文里面,要进行几种基于Retinex的图像增强的方法结果的对比,我现在不知道运行ssr代码的时候,我的照片应该放在哪里

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 基于 Retinex 的几种图像增强算法总结中的 SSR 算法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    SSR (Singal Scale Retinex),即单尺度视网膜算法是 Retinex 算法中最基础的一个算法。运用的就是上面的方法,具体步骤如下:

    • 输入原始图像 I(x,y) 和滤波的半径范围 sigma;
    • 计算原始图像 I(x,y) 高斯滤波后的结果,得到 L(x,y);
    • 按照公式计算,得到 Log[R(x,y)];
    • 将得到的结果量化为 [0, 255] 范围的像素值,然后输出结果图像。

    需要注意的是,最后一步量化的过程中,并不是将 Log[R(x,y)] 进行 Exp 化得-到 R(x,y) 的结果,而是直接将 Log[R(x,y)] 的结果直接用如下公式进行量化:
    在这里插入图片描述

    将过程整合在一起就是如下过程:
    在这里插入图片描述

  • 以下回答来自chatgpt:

    根据参考资料中的描述,SSR算法对图像进行了log变换、高斯模糊、差分等处理,而且在不同的sigma取值下的效果有所不同。因此,在运行SSR的Python代码时,应该将需要处理的照片放在可以访问的文件夹中,并确保代码中正确指定了图片路径。具体可参考以下示例代码:

    import cv2
    import numpy as np
    
    # 读取图片
    img = cv2.imread('path/to/image.jpg')
    
    # 将图像转为灰度图
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 进行SSR算法处理
    def ssr(img_gray, sigma):
        # 将灰度图从整数转为浮点数,并转换到对数域
        img_gray_float = np.float64(img_gray)
        log_img = np.log(img_gray_float + 1)
    
        # 计算不同sigma下的高斯核和权重
        gauss_kernels, weights = [], []
        for i in range(1, sigma+1):
            kernel_x = cv2.getGaussianKernel(3*i, sigma)
            kernel_y = cv2.getGaussianKernel(3*i, sigma)
            kernel = kernel_x * kernel_y.T
            gauss_kernels.append(kernel)
            weights.append(np.sum(kernel))
    
        # 对log图像进行高斯模糊
        blur_log_imgs = []
        for gk in gauss_kernels:
            blur_log_imgs.append(cv2.filter2D(log_img, -1, gk))
    
        # 根据不同sigma下的权重,进行加权平均
        final_img_log = np.zeros_like(log_img)
        for i in range(sigma):
            final_img_log += weights[i] * blur_log_imgs[i]
    
        final_img_log /= np.sum(weights)
    
        # 反过来得到SSR增强后的图像
        final_img = np.exp(final_img_log) - 1
        final_img = np.uint8(final_img)
    
        return final_img
    
    # 对图片进行SSR处理,并显示结果
    processed_img = ssr(gray_img, sigma=64)
    cv2.imshow('Processed Image', processed_img)
    cv2.waitKey(0)
    
    # 关闭窗口
    cv2.destroyAllWindows()
    

    以上代码中的'path/to/image.jpg'应该替换为实际存放图片的路径。同时,代码中使用的sigma值为64,可根据需要进行调整。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^