直方图均衡与色彩校正(iPhone / objective-C)

时间:2010-07-30 01:49:53

标签: iphone image-processing

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

我读了以下内容:

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

但它说:

仍然,应该注意的是,对RGB图像的红色,绿色和蓝色分量应用相同的方法可能产生图像颜色平衡的显着变化,因为颜色通道的相对分布由于应用算法而改变。但是,如果首先将图像转换为另一个颜色空间,Lab颜色空间或特别是HSL / HSV颜色空间,则可以将算法应用于亮度或值通道,而不会导致图像的色调和饱和度发生变化。

那么这是一种可行的方法吗?

  1. 抓取UIImage数据并从RGB转换为HSL
  2. 在亮度通道上应用HE
  3. 将数据转换回RGB
  4. 从数据创建新的UIImage
  5. 我想知道这会慢吗?另外,我是否必须以不同的方式处理8/16/24位数据,因为我不知道我的应用程序将使用哪种图像?或者我可以假设iPhone中的图像为24位吗?

    我很欣赏任何指向色彩校正直方图均衡的Objective-C代码的指针。

    我查看了下面的库,但它没有对HE进行任何颜色校正:

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

    谢谢!

4 个答案:

答案 0 :(得分:1)

是的,你可以这样做,这将有效。是的,它会“花费更多”,因为您必须来回转换 - 但如果您不想影响色调和饱和度,那么您需要支付的价格。你正在纠正的图像是否值得?这取决于你的应用程序,你的性能与最佳质量相比是否合适?您可能只需处理8位颜色组件,您可以假设“24位”用于图像,但这是3 x 8位组件虽然知道您的答案的唯一方法是尝试。

答案 1 :(得分:0)

我建议使用YUV Colorspace。精度和计算简单性(线性组合)。

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

答案 2 :(得分:0)

由于转换后,您将I / V作为连续值处理,您将必须应用一些分箱策略,这会产生您希望均衡的数量的步长直方图。因此,您可以通过减小箱尺寸来加快速度吗?

答案 3 :(得分:-2)

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

我在iPad平台上写了HE,但我发现从佳能打开一张大图后,整个程序在UIPopoverContoller,UIImagePickerController函数后崩溃了。我想这可能是因为我在手机操作系统上推得太多,或者操作系统只为每个应用程序分配了一定数量的内存空间。如果应用程序使用的不仅仅是预先设置的内存,那么iOS就会立即杀死应用程序。因此必须注意输入图像的大小,以及未使用内存的垃圾收集和内存泄漏。使用XCode的仪器工具来检查泄漏是必须的。