CLAHE是对比有限自适应直方图均衡,C中的来源可以在http://tog.acm.org/resources/GraphicsGems/gemsiv/clahe.c
找到到目前为止,我只看到了一些关于在灰度图像上应用CLAHE的示例/教程,因此可以在彩色图像上应用CLAHE(例如RGB 3通道图像)吗?如果是,怎么样?
答案 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;
}