1

如何使用 Opencv 计算图像的动态范围?良好动态范围的价值是什么?如何使用opencv计算它?

4

3 回答 3

2

图像的动态范围是最大和最小亮度值之差的 log2(以 EV 表示);考虑到图像是用线性响应模型编码的。

使用 OpenCV,您可以访问图像的像素值,因此迭代并应用公式。

于 2013-01-10T14:20:08.313 回答
0

动态范围为 20*log(maxv / minv),其中 maxv 和 minv 是图像的最大和最小像素值。这不应与信息内容或信噪比相混淆,信噪比测量信号(最大最小值)除以本底噪声的比率。

#include <math.h>
#include <opencv\highgui.h>
#include <opencv\cv.h>
#include <opencv\cxcore.h>

// Place your grayscale image with unsigned integer pixel values in img:
Mat img; 
double minVal; 
double maxVal; 
Point minLoc; 
Point maxLoc;

minMaxLoc( img, &minVal, &maxVal, &minLoc, &maxLoc );

dr = 20*log10(maxVal/(1+minVal)) 
于 2021-04-11T05:07:51.277 回答
0

我创建了一个函数,它返回作为参数传递的给定图像路径的计算动态范围列表。我计算了动态范围,例如:

  • 获取像素的RGB信息
  • 计算亮度
  • 获取给定照片的亮度最大值和最小值
  • 应用动态范围计算公式

这里的代码:

def dinamic_range(list_of_images):
    
    dinamic_range = []

    for img in list_of_images:
        image = cv2.imread(img, cv2.IMREAD_COLOR)
        pixel_brightness = []
        for x in range (1,480):
            for y in range (1,640):
                try:
                    pixel = image[x,y]
                    R, G, B = pixel
                    brightness = sum([R,G,B])/3
                    pixel_brightness.append(brightness)
                except IndexError:
                    pass
        din_range = round(np.log2(max(pixel_brightness))-np.log2(min((pixel_brightness))), 2)
        dinamic_range.append(din_range)
        print('The image', img, 'has a dinamic range of', din_range, 'EV')

    return dinamic_range
于 2021-04-11T10:21:51.967 回答