检测哪个图像更清晰

时间:2011-07-11 06:08:23

标签: image-processing detection scoring

我正在寻找一种方法来检测两个(相似)图像中的哪一个更清晰。

我认为这可以使用一些整体锐度的度量并产生分数(假设的例子:image1的清晰度得分为9,image2的清晰度得分为7;因此image1更清晰)

我已经对锐度检测/评分算法进行了一些搜索,但只会遇到可以提高图像清晰度的算法。

有没有人做过这样的事情,或者有任何有用的资源/潜在客户?

我会在webapp的上下文中使用此功能,因此首选PHP或C / C ++。

5 个答案:

答案 0 :(得分:13)

简单的方法是测量对比度 - 像素值之间差异最大的图像是最清晰的。例如,您可以计算像素值的方差(或标准偏差),以及产生较大数量的胜利。这会寻找最大的整体对比度,这可能不是你想要的 - 特别是它会倾向于使用具有最大景深的图片。

根据您的需要,您可能更喜欢使用类似FFT的内容来查看哪个显示频率最高的内容。这使得你可以偏向某些部分非常锐利的图像(但在其他部分则不那么强)而不是具有更多景深的图像,因此更多的图像相当清晰,但最大锐度更低(这是常见的,由于用较小的孔径衍射。)

答案 1 :(得分:8)

例如如this Matlab Central page所示,锐度可以通过平均梯度幅度估算。

我在Python中使用它作为

from PIL import Image
import numpy as np

im = Image.open(filename).convert('L') # to grayscale
array = np.asarray(im, dtype=np.int32)

gy, gx = np.gradient(array)
gnorm = np.sqrt(gx**2 + gy**2)
sharpness = np.average(gnorm)

使用更简单的numpy.diff代替numpy.gradient可以计算出类似的数字。得到的数组大小需要在那里进行调整:

dx = np.diff(array)[1:,:] # remove the first row
dy = np.diff(array, axis=0)[:,1:] # remove the first column
dnorm = np.sqrt(dx**2 + dy**2)
sharpness = np.average(dnorm)

答案 2 :(得分:5)

简单实用的方法是使用边缘检测(更多边= =更清晰的图像)。

使用PHP GD进行快速和脏手操作

function getBlurAmount($image) {
    $size = getimagesize($image);
    $image = imagecreatefromjpeg($image);
    imagefilter($image, IMG_FILTER_EDGEDETECT);    
    $blur = 0;
    for ($x = 0; $x < $size[0]; $x++) {
        for ($y = 0; $y < $size[1]; $y++) {
            $blur += imagecolorat($image, $x, $y) & 0xFF;
        }
    }
    return $blur;
}

$e1 = getBlurAmount('http://upload.wikimedia.org/wikipedia/commons/thumb/5/51/Jonquil_flowers_at_f32.jpg/800px-Jonquil_flowers_at_f32.jpg');
$e2 = getBlurAmount('http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Jonquil_flowers_at_f5.jpg/800px-Jonquil_flowers_at_f5.jpg');

echo "Relative blur amount: first image " . $e1 / min($e1, $e2) . ", second image " . $e2 / min($e1, $e2);

(模糊较少的图像更清晰) 更有效的方法是使用 Sobel运算符检测代码中的边缘。 PHP example(用C ++重写应该可以提高性能)。

答案 3 :(得分:3)

This paper描述了一种使用DWT计算模糊因子的方法。看起来非常直接,但不是检测锐度,而是检测模糊。似乎它首先检测边缘(简单卷积),然后使用DWT累积并对其进行评分。

答案 4 :(得分:2)

检查对比度传递函数(CTF)

Here's实施方案 Here's解释