彩色图用高斯滤波得到光照图,是否还用分割通道,滤波后是否还要归一化,因为接下来还要用retinex方法得到反射图。

彩色图用高斯滤波得到光照图,是否还用分割通道,滤波后是否还要归一化,因为接下来还要用retinex方法得到反射图。
下面
以下为代码:


def L_Blur(src_img, size, sigma):

    dst = cv.GaussianBlur(src_img, (size, size), sigma)


    return dst

if __name__ == '__main__':
    img = '00923-color.png'
    size = 3
    sigma = 300
    src_img = cv.imread(img)

    b_gray, g_gray, r_gray = cv.split(src_img) # 通道拆分
    b_gray = L_Blur(b_gray, size, sigma)
    g_gray = L_Blur(g_gray, size, sigma)
    r_gray = L_Blur(r_gray, size, sigma)
    result = cv.merge([b_gray, g_gray, r_gray])

    cv.imshow('img',src_img)

    cv.imshow('result',result)

    cv.waitKey(0)

    cv.destroyAllWindows()

从你的程序看,就是对每个通道进行高斯滤波,而且使用的高斯滤波参数也相同,那么根本没有必要split/merge,直接对彩色图像做高斯滤波就可以,该函数 GaussianBlur 就是分别对每个颜色通道进行滤波。

是的,在本代码中还用了通道分割,分别处理了图像的BGR三个通道,最后再合并回去。

也可以直接用彩图传入 GaussianBlur ,这个函数并没要求单通道。
另外你的srcimg最好先转成float型,因为你后面要求光照图,就要对srcimg与gaussianimg取log,所以需要float。然后两个log相减再转成CV_8UC3即可作为你要的光照图结果。