红眼减少算法

Aur*_*eau 41 algorithm image-processing

我需要为我正在处理的应用程序实施红眼减弱.

谷歌搜索主要提供商业最终用户产品的链接.

你知道一个好的红眼减少算法,它可以在GPL应用程序中使用吗?

Ben*_*nry 43

我在这里参加派对的时间已经很晚了,但对于未来的搜索者,我已经将以下算法用于我写的个人应用程序.

首先,用户选择要减少的区域,并将其作为中心点和半径传递给红眼减少方法.该方法循环遍历半径内的每个像素并执行以下计算:

//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));
}
Run Code Online (Sandbox Code Playgroud)

我非常喜欢这样的结果,因为它们保持了颜色强度,这意味着眼睛的光反射不会减少.(这意味着眼睛保持"活着"的样子.)


aki*_*iva 7

一个很棒的图书馆找到眼睛是openCV.它具有非常丰富的图像处理功能.也看到这个文件与伊利亚五萨福诺夫的标题是"自动红眼检测".


Mar*_*ett 6

首先,你需要找到眼睛!标准方法是运行边缘检测器,然后运行霍夫变换以找到相同大小的两个圆,但可能有更简单的算法来简单地找到红色像素的簇.

然后你需要决定用什么来替换它们,假设图像中有足够的绿/蓝数据,你可以简单地忽略红色通道.

OpenCV是一个非常好的图像处理免费库,它可能对你想要的东西有点过分 - 但是它有很多例子和非常活跃的社区.您还可以搜索对象跟踪算法,跟踪场景中的彩色对象是一个非常类似和常见的问题.