我想使用Numpy和OpenCV在Python中实现Krešimir Matkovic,László Neumann,Attila Neumann,托马斯Psik和Werner Purgatharn的论文 Global Contrast Factor - a New Approach to Image Contrast 中详细描述的过程。然而,有一个步骤我很难做到。
这个过程本质上涉及到灰度图像像素的一些基本乘法和加法,这可以通过Numpy矢量化操作相当容易地完成。然而,这个过程需要在越来越小的分辨率下重复图像,其中较小图像中的超像素根据论文中提供的特定公式进行组合。
从原始图像开始,每次尺寸减半,并且“超像素值被计算为平均线性亮度,然后将其转换为感知亮度”,由公式给出:
x1c 0d1x的数据
其中gamma = 2.2,k是原始像素值[0,255]。我假设这意味着每次缩小图像时,我需要一次计算四个像素(排列成正方形)的第一个公式,对它们进行平均,然后应用第二个公式作为较小图像的灰度值。
我的问题是,我不知道如何有效地缩小图像,以便其像素值以对应于这些公式的方式计算。OpenCV已经有一些内置的缩放算法,但老实说,我不确定哪种算法(如果有的话)会提供与论文中详细描述的结果相似的结果。
如何有效地调整灰度图像的大小,其中较小图像中的像素值由这些公式确定?
2条答案
按热度按时间kx5bkwkv1#
OpenCV
resize
不执行这些操作。您必须显式计算图像中每个像素的线性亮度值,然后使用线性插值(INTER_LINEAR
)应用resize
。线性插值将计算平均值。请参阅以下示例。它计算非重叠2x2块的平均值。字符串
据我所知,你只计算原始图像的线性亮度(l),然后依次降低分辨率(如果我错了,请纠正我)。
您可以使用查找表(LUT)加速线性亮度计算,因为如果图像是8位(8U),则最多只有256个不同的像素值。
bvjveswy2#
我根据原始论文为任何需要的人实现了GCF测量。
请注意,权重生成函数对于不同的分辨率可能不是理想的,而不是在论文中进行的实验。
字符串