Retinex图像增强算法(SSR, MSR, MSRCR)详解及其OpenCV源码

转自:

https://blog.csdn.net/ajianyingxiaoqinghan/article/details/71435098

PYTHON:

https://www.cnblogs.com/wangyong/p/8665434.html

import cv2
import numpy as np
#单尺度Retinex
def singleScaleRetinex(img, sigma):
    #按照公式计算
    _temp=cv2.GaussianBlur(img,(0,0), sigma)
    gaussian=np.where(_temp==0, 0.001, _temp)
    img_ssr= np.log10(img+0.01) - np.log10(gaussian)
    #量化到0--255
    for i in range(img_ssr.shape[2]):
        img_ssr[:, :, i] = (img_ssr[:,:,i] - np.min(img_ssr[:, :, i])) / \
                (np.max(img_ssr[:,:,i]) - np.min(img_ssr[:, :, i]))*255
    img_ssr = np.uint8(np.minimum(np.maximum(img_ssr, 0), 255))
    return img_ssr
    
def singleScaleRetinexTemp(img, sigma):
    #按照公式计算
    _temp=cv2.GaussianBlur(img,(0,0), sigma)
    gaussian=np.where(_temp==0, 0.001, _temp)
    retinex = np.log10(img+0.01) - np.log10(gaussian)

    return retinex
    
#多尺度Retinex, sigma_list[15,80,250]
def multiScaleRetinex(img, sigma_list):
    retinex = np.zeros_like(img*1.0)
    for sigma in sigma_list:
        print("sigma:", sigma)
        retinex += singleScaleRetinexTemp(img, sigma)
    img_msr= retinex / len(sigma_list)
    for i in range(img_msr.shape[2]):
        img_msr[:, :, i] = (img_msr[:,:,i] - np.min(img_msr[:, :, i])) / \
                (np.max(img_msr[:,:,i]) - np.min(img_msr[:, :, i]))*255
    img_msr = np.uint8(np.minimum(np.maximum(img_msr, 0), 255))
    return img_msr
    
if __name__ == '__main__':
    imageSrc = cv2.imread("G:\\vc2010\\Opencv\\Test\\image\\test_MSRCR.jpg")
    cv2.imshow('src',imageSrc)

    dstsrc = singleScaleRetinex(imageSrc,300)
    cv2.imshow('ssr',dstsrc)
    
    sigma_list = [15, 80, 250]
    dstmsr = multiScaleRetinex(imageSrc, sigma_list)
    cv2.imshow('msr',dstmsr) 
    cv2.waitKey(0)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值