如何在RGB彩色图像上应用CLAHE

时间:2014-07-29 04:54:30

标签: opencv computer-vision

CLAHE是对比有限自适应直方图均衡,C中的来源可以在http://tog.acm.org/resources/GraphicsGems/gemsiv/clahe.c

找到

到目前为止,我只看到了一些关于在灰度图像上应用CLAHE的示例/教程,因此可以在彩色图像上应用CLAHE(例如RGB 3通道图像)吗?如果是,怎么样?

2 个答案:

答案 0 :(得分:21)

将RGB转换为LAB(L为亮度,a和b为颜色对手绿色 - 红色和蓝 - 黄色)将完成工作。将CLAHE应用于LAB格式的转换后的图像,仅适用于Lightness组件,并将图像转换回RGB。 这是片段。

bgr = cv2.imread(image_path)

lab = cv2.cvtColor(bgr, cv2.COLOR_BGR2LAB)

lab_planes = cv2.split(lab)

clahe = cv2.createCLAHE(clipLimit=2.0,tileGridSize=(gridsize,gridsize))

lab_planes[0] = clahe.apply(lab_planes[0])

lab = cv2.merge(lab_planes)

bgr = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)

bgr是应用CLAHE后获得的最终RGB图像。

答案 1 :(得分:1)

这对于 c#,为 rgb 图像应用 clahe。

    private static Image<Bgr, byte> appy_CLAHE( Image<Bgr, byte> imgIn , int clipLimit=2, int tileSize=25)
    {
        var imglabcol = new Image<Lab, byte>(imgIn.Size);
        var imgoutL = new Image<Gray, byte>(imgIn.Size);  

        var imgoutBGR = new Image<Bgr, byte>(imgIn.Size);  

        //clahe filter must be applied on luminance channel or grayscale image
        CvInvoke.CvtColor(imgIn, imglabcol, ColorConversion.Bgr2Lab, 0); 

        CvInvoke.CLAHE(imglabcol[0], clipLimit, new Size(tileSize, tileSize), imgoutL);
        imglabcol[0] = imgoutL; // write clahe results on Lum channel into image

        CvInvoke.CvtColor(imglabcol, imgoutBGR, ColorConversion.Lab2Bgr, 0);

        return imgoutBGR;
    }