说起红眼算法,这个话题非常古老了。 百度百科上的描述: “红眼”一般是指在人物摄影时,当闪光灯照射到人眼的时候,瞳孔放大而产生的视网膜泛红现象。 由于红眼现象的程度是根据拍摄对象色素的深浅决定的,如果拍摄对象的眼睛颜色较深,红眼现象便不会特别明显。 “红眼”也指传染性结膜炎。 近些年好像没有看到摄影会出现这样的情况,毕竟科技发展迅速。 记得最早看到红眼移除算法是在ACDSee 这个看图软件的编辑功能区。 当然,当时ACDSee 也没有能力做到自动去红眼,也需要进行手工操作。 红眼移除不难,其实就是把眼睛区域的颜色修正一下。 但是难就难在修复之后,不要显得太过突兀,或者破坏眼睛周围的颜色 。 这就有点难办了。 当然其实最简单的思路,就是转色域空间处理后再转回RGB。 记得在2015年的时候, 曾经一度想要寻找红眼移除过度自然的算法思路, 当时仅仅是好奇,想要学习之。 直到2016年,在一个Delphi 图像控件的源码里看到了一个红颜移除算法函数。 把代码转写成C之后验证了一下,效果不错,过度很自然。 貌似好像有点暴露年龄了, 俺也曾经是Delphi程序员来的,无比怀念Delphi7。 贴上红眼算法的Delphi源码: procedure _IERemoveRedEyes(bitmap: TIEBitmap; fSelx1, fSely1, fSelx2, fSely2: