[python]画質評価としてのPSNRを参考に,.exrが使用できるように変更したつもりでした。
しかし、変更したプログラムを実行したところダメでした。
どのように直せばいいのでしょうか?
PSNR.py
1import cv2 2import numpy as np 3import math 4 5#画像の読み込み 6Original = cv2.imread('test/Desk.exr') #元画像 7Distorted = cv2.imread('out/000010_out.exr') #圧縮した画像 8 9#画素値の読み込み 10pixel_value_Ori = Original.flatten().astype(float) 11pixel_value_Dis = Distorted.flatten().astype(float) 12 13#画素情報の取得 14imageHeight, imageWidth, BPP = Original.shape 15 16#画素数 17N = imageHeight * imageWidth 18 19#1画素あたりRGB3つの情報がある. 20addr = N * BPP 21 22#RGB画素値の差の2乗の総和 23sumR=0 24sumG=0 25sumB=0 26 27#差の2乗の総和を計算 28for i in range(addr): 29 if(i%3==0): 30 sumB += pow ( (pixel_value_Ori[i]-pixel_value_Dis[i]), 2 ) 31 elif(i%3==1): 32 sumG += pow ( (pixel_value_Ori[i]-pixel_value_Dis[i]), 2 ) 33 else: 34 sumR += pow ( (pixel_value_Ori[i]-pixel_value_Dis[i]), 2 ) 35 36#PSNRを求める 37MSE =(sumR + sumG + sumB) / (3 * N ) 38PSNR = 10 * math.log(65535*65535/MSE,10) 39print('PSNR',PSNR)
を実行したところ
error
1Traceback (most recent call last): 2 File "PSNR.py", line 30, in <module> 3 sumB += pow ( (pixel_value_Ori[i]-pixel_value_Dis[i]), 2 ) 4IndexError: index 1658880 is out of bounds for axis 0 with size 1658880
となってしまいました。
IndexError: index 1658880 is out of bounds for axis 0 with size 1658880
と検索したところ、
Numpyで行列の範囲外を切り抜くとどうなるかでは範囲外である。
IndexError: index is out of bounds for axis 0 with size 3 エラーの場合の対処では
原因
配列のサイズを超えて代入を行おうとしました。
対策
配列のサイズと代入するときの添え字を確認します。
となっていました。
自分のプログラムのどこを直せばいいのか、全くわからないので教えていただきたいです。
回答2件
あなたの回答
tips
プレビュー