如何使用Opencv计算图像的动态范围?良好动态范围的价值是多少?如何使用opencv计算它?
答案 0 :(得分:2)
图像的动态范围是最大和最小亮度值之差的log2(以EV表示);考虑到图像是用线性响应模型编码的。
使用OpenCV,您可以访问图像的像素值,因此请迭代并应用公式。
答案 1 :(得分: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))
答案 2 :(得分:0)
我创建了一个函数,它返回作为参数传递的给定图像路径的计算动态范围列表。我已经计算了动态范围,如:
代码如下:
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