我试图用Python中的GUI(很可能使用Kivy)来制作一个程序,以匹配两个图像的曝光。我想显示这两个图像(RGB或灰度)并排与其对应的直方图,并有一个滑块,以能够控制对选定图像的曝光。我想就如何做这件事提出一些建议。
到目前为止,我已经阅读了几篇文章,似乎有几种方法可以计算图像的直方图(numpy、matplotlib、openCV和PIL),但是我不知道哪种方法是最好的(最少需要安装的库/依赖项)。我也读过关于改变图像曝光的文章,有些人提到改变亮度和对比度,所以你需要同时改变这两个来改变曝光?我知道openCV有equalizeHist,但这是自动完成的,我希望这两个图像的整体曝光率尽可能接近;这就是我想手动完成的原因。如果能自动完成就太好了,但我还在考虑怎么做。
我知道你们非常重视你们的时间,所以如果你们没有时间深入回答这个问题,我会理解的。
让我们定义一下你使用的曝光术语。你可以曝光明亮和黑暗的场景说1秒,并有完全不同的图像。或者,您可能希望图像具有相似的对比度,但这并不意味着必须进行相同的曝光。
既然您提到了直方图均衡化,那么您最终可能会将两个图像的直方图等同起来,使它们看起来具有相同的对比度。直方图均衡化将使每个图像直方图看起来平坦,因此所有强度都是相同的可能性(因此最佳分布,以最大化对比度-并不总是一个令人赏心悦目的效果)。您可能希望为每个图像分别创建自己的非平面直方图配置文件,并对其进行修改,直到图像看起来像您希望的那样。
下面是一个伪代码: 一。计算每张图像的直方图:H[i] 2。将直方图求和为累积直方图:C[i]=H[i]+C[i-1]分别用于每个图像; 三。规范化每个:C[i]/=和(C(i)) 四。在传统的直方图均衡化中,您重新映射像素强度,以便它们同样可能:i2=255*C[i1];在您的情况下,您只希望它们遵循您自己的直方图配置文件(这样您就可以有一个滑块来调整每个图像强度分布,然后直观地比较结果);例如,尝试类似这样的重新映射:i2=i1*k+255*C[i1]*(1-k),其中滑块将k的值从0.0更改为1.0。当k=1时,得到原始图像;当k=0时,得到完整的直方图均衡化。下面是一个直方图均衡化函数,我用它来绘制Kinect深度的颜色映射,它有10000到255个灰度级别。您必须根据您的情况修改和调整功能。
我们有一个直方图调整的例子here
听起来你好像对直方图匹配很感兴趣。我有一些用于此目的的代码here,但它没有经过很好的测试。
如果您发现该代码有用,可以随意向scikit映像发出pull请求,我们可以尝试将其集成到包中。
编辑2019-04-29:直方图匹配是now included in scikit-image。
相关问题 更多 >
编程相关推荐