在Matlab中提取图像的运动模糊。

3
我发现有些论文提到可以通过分析梯度直方图(模糊图像的梯度遵循重尾分布)或使用fft(模糊图像具有较低的频率)来检测图像中的模糊情况。此外,您可以参考这个链接了解更多信息。
但是我不太确定如何在Matlab中实现它。如何定义阈值等问题需要进一步探讨。
[Gx, Gy] = imgradientxy(a);
G = sqrt(Gx.^2+Gy.^2)

运行命令后,如果找到了 G,应该怎么做?如果想绘制一个关于像素数量G的图形,应该怎么做?

我是Matlab和图像处理的新手。是否有人能够提供更多实现细节的详细信息?

2个回答

3

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

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

< p > 翻译: 如您所见,可以检测出图像是否模糊。但是,检测图像模糊程度似乎很困难,因为这也取决于模糊与场景之间的角度以及由于不完美的梯度计算。此外,绝对值非常依赖于场景,因此您可能需要在解释该值时加入一些关于场景的先验知识。


1
这是一个非常有趣的话题。 尽管梯度幅度可以用作模糊检测的良好特征,但在处理图像中的均匀区域时,此特征将失败。换句话说,该特征将无法区分模糊和平坦区域。还有许多其他解决方案。其中一些检测平坦区域以避免将平坦区域分类为模糊。如果您想了解更多信息,可以查看以下链接: 您可以在cvpr会议上找到许多优秀的最新论文。 其中许多都有网站,在那里他们讨论细节并提供代码。 这篇文章http://www.cse.cuhk.edu.hk/leojia/projects/dblurdetect/ 是我参与的论文之一 您可以找到可用的代码。 您还可以在cvpr中检查其他论文。其中大多数都有代码 这是另一个 http://shijianping.me/jnb/index.html

1
仅仅链接到自己的东西并不是一个好答案。一个好的答案应该包含离线资源的基本部分,以便未来用户参考,并引用以下内容:你所谈论的是什么?我在哪里安装它?如何安装它?如何使用这个东西来解决我在问题中遇到的确切问题?你与这个东西有任何关联吗?请参见:如何以社区友好的方式链接到外部资源? - Mogsdad
不,这不是我的工作…我希望它是。但是CVPR是计算机视觉领域的第一个会议。 - Bashar Haddad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接