在matlab中提取图像的运动模糊

时间:2015-12-30 08:42:27

标签: image matlab image-processing blur

我发现有一些纸说可以分析梯度直方图 (模糊图像的梯度跟随重尾分布) 或使用fft(模糊图像的频率较低) Is there a way to detect if an image is blurry? 检测图像中的模糊。

但我不太确定如何在matlab中实现它。如何定义阈值等。

[Gx, Gy] = imgradientxy(a);
G = sqrt(Gx.^2+Gy.^2)

运行命令后我应该怎么做才能找到G? 如果我想要绘制number of pixel诗句G

的图表,我该怎么办?

我是matlab和图像处理的新手。任何人都可以提供有关如何实施它的更多细节

2 个答案:

答案 0 :(得分:2)

准备工作:我们读取了摄像师图像,它通常用于可视化图像处理算法,并添加一些运动模糊。

origIm = imread('cameraman.tif');
littleBlurredIm = imfilter(origIm,fspecial('motion',5,45),'replicate');
muchBlurredIm = imfilter(origIm,fspecial('motion',20,45),'replicate');

为我们提供了以下图片:

start images

要计算拉普拉斯算子,您可以使用imgradient函数,该函数返回幅度和角度,因此我们只需丢弃角度:

[lpOrigIm,~] =  imgradient(origIm);
[lpLittleBlurredIm,~] = imgradient(littleBlurredIm);
[lpMuchBlurredIm,~] = imgradient(muchBlurredIm);

给出:

filtered images

您可以直观地看到原始图像边缘清晰锐利。具有少量模糊的图像仍具有一些特征,而具有大量模糊的图像仅包含一些非零值。

正如nikie对this question的回答所提出的,我们现在可以为模糊性创建一些衡量标准。 (或多或少)稳健度量例如是值的前0.1%的中值:

% Number of pixels to look at: 0.1%
nPx = round(0.001*numel(origIm));

% Sort values to pick top values
sortedOrigIm = sort(lpOrigIm(:));
sortedLittleBlurredIm = sort(lpLittleBlurredIm(:));
sortedMuchBlurredIm = sort(lpMuchBlurredIm(:));

% Calculate measure
measureOrigIm = median(sortedOrigIm(end-nPx+1:end));
measureLittleBlurredIm = median(sortedLittleBlurredIm(end-nPx+1:end));
measureMuchBlurredIm = median(sortedMuchBlurredIm(end-nPx+1:end));

其中给出了以下结果:

Original image:          823.7 
Little Blurred image:    593.1 
Much Blurred image:      490.3

这是对不同运动模糊角度和模糊幅度的这种模糊度量的比较。

blurriness

最后,我尝试了上面链接的答案中的测试图像:

test images

给出了

blurriness test images

解释:如您所见,如果图像模糊,则可以检测到。然而,似乎难以检测图像的强烈模糊,因为这还取决于模糊相对于场景的角度,并且由于不完美的梯度计算。此外,绝对值与场景有很大关系,因此您可能必须将有关场景的一些先验知识放入此值的解释中。

答案 1 :(得分:1)

这是一个非常有趣的话题。 虽然梯度幅度可以用作模糊检测的良好特征,但是当处理图像中的均匀区域时,该特征将失败。换句话说,此功能将无法区分模糊和平坦区域。还有许多其他解决方案。其中一些检测平坦区域以避免将平坦区域分类为模糊。如果您想了解更多信息,可以查看以下链接:

你可以在cvpr会议上找到很多好的近期论文。 他们中的许多人都有网站,他们讨论细节并提供代码。 这一个http://www.cse.cuhk.edu.hk/leojia/projects/dblurdetect/ 是我工作过的论文之一 你可以找到可用的代码。 您还可以查看cvpr中的其他论文。他们中的大多数都有代码 这是另一个 http://shijianping.me/jnb/index.html