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情報を取得します
  • 明るさを計算する
  • 指定された写真のbrightnesの最大値と最小値を取得します
  • ダイナミックレンジ計算の式を適用します

ここにコードがあります:

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 に答える