我一直在使用 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 平均值。?
如果我在代码中遗漏了什么,请原谅我,但这让我有点困惑。提前感谢您的帮助。