直方图均衡化与颜色校正(iPhone/Objective-C)

7

我正在尝试在我的iPhone应用程序中为UIImage实现直方图均衡化方法(HE)。

我阅读了以下内容:

http://en.wikipedia.org/wiki/Histogram_equalization

但是它说:
尽管如此,应注意将相同的方法应用于RGB图像的红色、绿色和蓝色分量可能会导致图像的色彩平衡发生巨大变化,因为应用算法的结果会改变颜色通道的相对分布。然而,如果首先将图像转换为另一种颜色空间,如Lab颜色空间或HSL/HSV颜色空间,那么算法就可以应用于亮度或值通道,而不会影响图像的色调和饱和度。
这样做是否可行?
1.获取UIImage数据并从RGB转换为HSL 2.在亮度通道上应用HE 3.将数据转换回RGB 4.从数据创建新的UIImage 我想知道这会很慢吗?还有,我是否需要以不同的方式处理8/16/24位数据,因为我不知道我的应用程序将使用什么类型的图像?或者我可以假设iPhone中的图像为24位?
我会感激任何指向执行颜色校正直方图均衡化的Objective-C代码的指针。
我已经查看了下面的库,但它不会对HE进行任何颜色校正:

http://code.google.com/p/simple-iphone-image-processing/source/browse/#svn/trunk/Classes%3Fstate%3Dclosed

谢谢!


这个问题的答案中有一个简单的HE实现:https://dev59.com/R0_Sa4cB1Zd3GeqP9ylq#3306089 但是它只能在图像本身的颜色空间中工作,对于其他颜色空间则无效。 - tonklon
谢谢,我看到了。我想要更多关于颜色校正方面的信息... - M-V
4个回答

1

是的,你可以这样做,那会起作用。是的,它会“花费更多”,因为你必须来回进行转换 - 但如果你不想影响色调和饱和度,那就是你必须付出的代价。对于你正在纠正的图像,这是否值得?这取决于你的应用程序,你是否愿意在性能和最佳质量之间做出权衡?你可能只需要处理8位颜色分量,你可以假设图像为“24位”,但那是3个8位分量。知道你的答案的唯一方法是尝试。


0

我建议使用YUV颜色空间。这样做既可以提高准确性,又可以简化计算(线性组合)。

一种方法是在RGB图像(Image2)上应用直方图均衡化。 然后让用户选择他想要的,只应用于亮度还是所有3个通道。 对于第一个选择,使用原始图像的UV通道和均衡化图像的Y通道,并转换回RGB。 对于第二个选择,只需将Image2留给用户。


0

由于变换后,您将处理I / V作为连续值,因此必须应用一些分箱策略,这将导致所需均衡化的数量的步骤直方图。因此,您可以通过减小箱体大小来加快速度。


-2

只需编写代码并将HE应用于每个RGB组件。虽然对于其3个组件有很多计算,但编程速度还可以。在大多数情况下,对比度得到改善,但图像的“外观”也会发生变化。因此,同意将RGB转换为另一个空间,然后再次应用HE。我正在寻找公式以及适用于HE的正确颜色空间。哪种颜色空间更容易?

我在iPad平台上编写了HE,但是我发现在打开从我的佳能相机拍摄的大型图像后,在UIPopoverContoller、UIImagePickerController函数之后整个程序崩溃了。我认为这可能是因为我在手机的操作系统上施加了太多压力,或者操作系统仅为每个应用程序分配了有限的内存空间。如果应用程序使用的内存超过预设值,则iOS会立即终止应用程序。因此,必须注意输入图像的大小以及未使用内存的垃圾收集和内存泄漏。使用XCode的工具检查泄漏是必须的。


2
将HE应用于每个RGB组件会扭曲图像的颜色。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接