我需要为我正在处理的应用程序实施红眼减弱.
谷歌搜索主要提供商业最终用户产品的链接.
你知道一个好的红眼减少算法,它可以在GPL应用程序中使用吗?
我在这里参加派对的时间已经很晚了,但对于未来的搜索者,我已经将以下算法用于我写的个人应用程序.
首先,用户选择要减少的区域,并将其作为中心点和半径传递给红眼减少方法.该方法循环遍历半径内的每个像素并执行以下计算:
//Value of red divided by average of blue and green: Pixel pixel = image.getPixel(x,y); float redIntensity = ((float)pixel.R / ((pixel.G + pixel.B) / 2)); if (redIntensity > 1.5f) // 1.5 because it gives the best results { // reduce red to the average of blue and green bm.SetPixel(i, j, Color.FromArgb((pixel.G + pixel.B) / 2, pixel.G, pixel.B)); }
我非常喜欢这样的结果,因为它们保持了颜色强度,这意味着眼睛的光反射不会减少.(这意味着眼睛保持"活着"的样子.)
一个很棒的图书馆找到眼睛是openCV.它具有非常丰富的图像处理功能.也看到这个文件与伊利亚五萨福诺夫的标题是"自动红眼检测".
首先,你需要找到眼睛!标准方法是运行边缘检测器,然后运行霍夫变换以找到相同大小的两个圆,但可能有更简单的算法来简单地找到红色像素的簇.
然后你需要决定用什么来替换它们,假设图像中有足够的绿/蓝数据,你可以简单地忽略红色通道.
OpenCV是一个非常好的图像处理免费库,它可能对你想要的东西有点过分 - 但是它有很多例子和非常活跃的社区.您还可以搜索对象跟踪算法,跟踪场景中的彩色对象是一个非常类似和常见的问题.