检测图像中小细节的存在

Detecting the presence of small details in an image

我想检测图像中包含相对大量小细节的区域,但同样我需要忽略强边缘。例如,我想(大约)识别位于建筑物上的海报上的小文本区域,但我也想忽略建筑物本身的强边缘。

我想我可能正在寻找特定的频段,所以 spring 想到的方法包括:手动调整卷积核直到达到我需要的效果,使用特定的 DCT 系数,应用定向滤波器响应的直方图。但也许我错过了更明显的东西?

为了回答下面评论中的问题,我正在用 Matlab 开发

我愿意接受有关如何实现此目标的任何建议 - 谢谢!

这个问题本身太宽泛了,对我来说是一个非纸质的答案。话虽如此,我可以为您提供一些缩小问题范围的建议。

首先,转到 Google Scholar 并搜索您的工作所围绕的关键字。在您的情况下,其中之一可能是 边缘检测

查看最近的论文(不超过 5 年),寻找满足您需求的工作。如果您没有找到任何内容,请扩大搜索条件或尝试不同的术语。

如果您有更具体的内容,请编辑您的问题并告诉我。

永远记得把大问题分成小块,然后再分成更小的块,直到你吃到一盘美味可口的食物。

编辑:根据我收集到的信息,您对边缘检测和特征选择算法感兴趣吗?这里有几个有用的链接,可能会有用:

-MATLAB feature detection -MATLAB edge detection

还有这个MATLAB edge detection write up, which is a part of their extensive guide documentation will hopefully prove useful enough for you to dig through the Matlab image processing toolbox。您的问题的具体答案的文档。

这里有一些不科学的东西,但让人们谈论起来可能还不错。我从这张图片开始。

并使用出色的免费 ImageMagick 将其分成 400x400 像素的图块,如下所示:

convert -crop 400x400 cinema.jpg tile%d.jpg 

现在我测量每个瓦片的熵,并通过增加熵来排序:

for f in tile*.jpg; do
   convert $f -print '%[entropy] %f\n' null:
done | sort -n

我得到了这个输出:

0.142574 tile0.jpg
0.316096 tile15.jpg
0.412495 tile9.jpg
0.482801 tile5.jpg
0.515268 tile4.jpg
0.534078 tile18.jpg
0.613911 tile12.jpg
0.629857 tile14.jpg
0.636475 tile11.jpg
0.689776 tile17.jpg
0.709307 tile10.jpg
0.710495 tile16.jpg
0.824499 tile6.jpg
0.826688 tile3.jpg
0.849991 tile8.jpg
0.851871 tile1.jpg
0.863232 tile13.jpg
0.917552 tile7.jpg
0.971176 tile2.jpg

所以,如果我查看最后 3 个(即熵最大的那些),我得到:

您会发现最大稳定极值区域 (MSER) 对此很有用。您应该能够施加面积限制以过滤掉大的 MSER,然后计算 MSER 密度,例如 Mark 在他的回答中所做的那样,将图像分成多个图块。