私はminMaxLocを使用して、グレースケール画像に対してラプラシアンフィルターを実行して得られたデータの最大値を計算しています。私の単純な意図は、シャープネスを大まかに見積もることです。ここで説明した混乱した状況に遭遇しました。
minMaxLoc関数から取得された最大値は、一連の画像に対して1360、1456、450などでした。
Laplacian(src_gray,dst,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
minMaxLoc(dst,&min,&estimate,&minLoc,&maxLoc,noArray());//Estimate is the max value
ここで、平均を計算して、画像のシャープネスの広がりをよりよく理解しようとしました。DSTは、ラプラシアンからのデータを保持するMat変数であることに注意してください。
Size s = dst.size();
rows = s.height;
cols = s.width;
total = 0;
max = 0;
for(int k=0;k<rows;k++)
{
for(int l=0;l<cols;l++)
{
total = total + abs(dst.at<int>(k,l));
}
}
average = total/(rows*cols);
私が得た2つの不可解な結果があります。私が取得した平均値は、minMaxLocから取得した最大値よりも大きいだけでなく、一連の画像を試してみると、負の値になることもありました。サンプル平均値22567、場合によっては-25678。
負の値の発生は、abs()を使用してラプラシアン結果の絶対値を取得しているため、さらに厄介でした。
正しく理解するために、私は自分で最大値を計算し、次に平均値を計算しました:
Size s = dst.size();
rows = s.height;
cols = s.width;
total = 0;
max = 0;
for(int k=0;k<rows;k++)
{
for(int l=0;l<cols;l++)
{
if(abs(dst.at<int>(k,l))>max)
{
max = abs(dst.at<int>(k,l));
}
total = total + abs(dst.at<int>(k,l));
}
}
average = total/(rows*cols);
驚いたことに、最大値は8桁であることがわかりました。
これが私が混乱した理由です。minMaxLoc関数から与えられる最大値はいくつですか?そして、なぜabs()が機能していないのか、そしてなぜ-ve平均値を取得しているのですか?
コードに何かが欠けている場合はご容赦ください。ただし、これは少し混乱します。よろしくお願いします。