使用 Aforge.net 或 c# 执行类似于 Photoshop 的 Auto Tone 的操作

Posted

技术标签:

【中文标题】使用 Aforge.net 或 c# 执行类似于 Photoshop 的 Auto Tone 的操作【英文标题】:Do something similar to Auto Tone of Photoshop with Aforge.net or c# 【发布时间】:2013-03-19 12:33:53 【问题描述】:

我正在开发一个图像皮肤检测应用程序。

但是我的相机有问题,试图补偿光线,结果图像很糟糕,在大多数情况下,我对图像有冷或暖效果。 当我使用 Photoshop 时,有 AutoTone 功能可以标准化图像并减少此问题。

使用 aforge 我想使用 HistogramEqualization() 过滤器,但结果非常糟糕:

// create filter
HistogramEqualization filter = new HistogramEqualization( );
// process image
filter.ApplyInPlace( sourceImage );

所以我的问题是: Accord 或 Aforge 中是否有与 Photoshop 自动色调相同的功能? 如果没有,是否有一些库或脚本可以做到这一点?

谢谢大家。

【问题讨论】:

【参考方案1】:

我使用 LevelsLinear 过滤器并基于图像统计数据:

ImageStatistics stats = new ImageStatistics(sourceImage);
LevelsLinear levelsLinear = new LevelsLinear 
    InRed = stats.Red.GetRange( 0.90 ),
    InGreen = stats.Green.GetRange( 0.90 ),
    InBlue  = stats.Blue.GetRange( 0.90 )
;

levelsLinear.ApplyInPlace(sourceImage);

您可以使用范围来调整结果。

【讨论】:

哇,这个标准化太完美了!非常感谢。【参考方案2】:

您可能不想均衡直方图,因为如您所见,通常不会有太多红色的照片会产生大量红色并使其看起来很糟糕。相反,您可能想要检查几乎无处不在的色调的偏差。例如,您的原始照片可能几乎每个像素都偏向蓝色,因此可能不应该存在。寻找最小偏差并在任何地方消除该数量。

一个更实用的解决方案是在您的相机上试验白平衡设置,看看什么可以为您带来最佳效果。选择正确的预设,将利用可能与您手动编写的算法一样好的算法。但也许你这样做是为了学习。

【讨论】:

这是一个例子,但我的程序是为网络摄像头制作的,没有太多的设置。我需要 c# 中的东西。

以上是关于使用 Aforge.net 或 c# 执行类似于 Photoshop 的 Auto Tone 的操作的主要内容,如果未能解决你的问题,请参考以下文章

C# Aforge.net 在其他应用程序使用相同的相机时显示相机源

C# 利用AForge.NET开源类库实现 图像素描效果

AForge.NET的介绍

aforge.video.ffmpeg 支持音频吗

用 aforge.net 小试一下验证码识别

Aforge.net之旅——开篇:从识别验证码开始