本日は画像品質を評価する評価指標の一つであるMSE(Mean Squared Error: 最小二乗誤差)を紹介し、画像のMSEを計算するプログラムを紹介したいと思います。
目次
MSE(Mean Squared Error: 最小二乗誤差)
最小二乗誤差は、正解値と評価したい値の差の二乗から計算される評価指標です。もし、評価したい対象と正解が完全に一致する場合、MSEは0となります。
MSEは以下の式で計算されます。
画像処理であればNは画像のピクセル数が対応します。以下に4画素の画像でMSEを計算する場合の計算例を示します。
MSEは単なる画素値の差の二乗をベースとした指標のため、人間の視覚的な感覚と、劣化具合が必ずしも一致しないという問題はありますが、非常に簡単に計算することが可能です。
以下で、MSEを計算するプログラムを見ていきます。
画像のMSE測定プログラム(Python+OpenCV)
ソースコード全体
動作環境:OpenCV 4.5.5
今回は確認の意味も込めて、NumpyとOpenCVそれぞれでMSEを計算するプログラムを書きました。今回はグレースケール画像で実験しています。カラー画像はこちらの記事を参照ください。
入力データとしては、以下の画像を用いました。
gt_imageがGroundTruthの画像(正解画像)であり、noisy_imageがノイズが付与された画像となります。画像にはガウシアンノイズを付与しています。
ガウシアンノイズに関してはこちらの記事を参照してください。
実行結果
1) ノイズレベル σ=30
■ 正解画像
■ ノイズ画像
■ MSE測定結果
MSE_numpy : 877.3797314049586
MSE_opencv : 877.3797314049588
NumpyとOpenCVで測定結果が一致することがわかりました。
また、ガウシアンノイズレベルσ=30のため、多くの画素が30以内の誤差となります。MSEは大体30×30=900よりやや小さい値となり、概ね感覚的にも正しそうです。
2) ノイズレベル σ=100
■ 正解画像
■ ノイズ画像
■ MSE測定結果
MSE_numpy : 6273.029256198347
MSE_opencv : 6273.029256198348
ノイズを大きくするとMSEの値も大きくなることがわかります。
まとめ
今回はMSEを用いて画像を評価する方法を紹介しました。今後は他の評価方法についても紹介したいと思います。