Questions tagged «image-processing»

与数字图像处理有关的任何事物,即用于从数字图像中提取或操纵信息的理论和技术。

24
图像处理:“可口可乐”识别的算法改进
我过去几年中最有趣的项目之一是关于图像处理的项目。目的是开发一个能够识别可口可乐“罐头”的系统(请注意,我强调的是“罐头”一词,稍后您会看到原因)。您可以在下面看到一个示例,该示例在带有刻度和旋转的绿色矩形中可以识别。 对项目的一些限制: 背景可能非常嘈杂。 该罐可以具有任何规模或旋转,甚至方向(在合理的限度内)。 图像可能有一定程度的模糊性(轮廓可能不完全笔直)。 图像中可能有可口可乐瓶,该算法只能检测到罐头! 图像的亮度可能相差很大(因此您不能“过多”依赖颜色检测)。 该罐可以部分地隐藏在两侧或中间,可能部分地隐藏了一瓶后面。 有可能是没有能在所有的图像中,在这种情况下,你必须找到什么,写一条消息这样说。 因此,您可能会遇到如下棘手的事情(在这种情况下,我的算法完全失败了): 我前一段时间做了这个项目,并且做起来很有趣,并且实现得很好。以下是有关我的实现的一些详细信息: 语言:使用OpenCV库在C ++中完成。 预处理:对于图像预处理,即将图像转换为更原始的形式以提供给算法,我使用了两种方法: 将颜色域从RGB更改为HSV,并基于“红色”色调进行过滤,饱和度高于特定阈值以避免产生类似橙色的颜色,而对低值进行过滤以避免产生深色。最终结果是一个二进制的黑白图像,其中所有白色像素将代表与该阈值匹配的像素。显然,图像中仍然有很多废话,但这减少了必须处理的尺寸数。 使用中值滤波进行噪声滤波(获取所有邻居的中值像素值,然后用该值替换像素)以减少噪声。 经过2个先验步骤后,使用Canny Edge Detection滤镜获取所有项目的轮廓。 算法:我为此任务选择的算法本身取材于这本很棒的书中有关特征提取的书,并称为通用霍夫变换(与常规霍夫变换完全不同)。它基本上说了几件事: 您可以在不知道其解析方程的情况下描述空间物体(此处就是这种情况)。 它可以抵抗缩放和旋转等图像变形,因为它将基本上测试图像的缩放因子和旋转因子的每种组合。 它使用算法将“学习”的基本模型(模板)。 轮廓图像中剩余的每个像素将投票给另一个像素,根据它从模型中学到的信息,该像素应该是对象的中心(就重力而言)。 最后,您将获得投票的热图,例如,此处罐头轮廓的所有像素都将为其重力中心投票,因此在与像素相对应的同一像素中将有很多投票居中,将会在热图中看到一个峰值,如下所示: 有了这些功能后,您就可以使用简单的基于阈值的启发式方法来确定中心像素的位置,从中可以得出比例尺和旋转角度,然后在其周围绘制一个小矩形(最终比例尺和旋转系数显然相对于您的原始模板)。理论上至少... 结果:现在,尽管此方法在基本情况下可行,但在某些领域却严重缺乏: 这是非常慢!我的压力还不够。处理30张测试图像几乎需要整整一天的时间,这显然是因为我对旋转和平移具有非常高的缩放系数,因为某些罐非常小。 当瓶子出现在图像中时,它完全丢失了,并且出于某种原因几乎总是找到瓶子而不是罐子(也许是因为瓶子更大,因此像素更多,投票更多) 模糊图像也不是很好,因为投票最终以像素为中心围绕中心的随机位置,从而以非常嘈杂的热图结束。 实现了平移和旋转的不变性,但没有实现定向,这意味着未识别未直接面对相机物镜的罐子。 您是否可以使用专有的OpenCV功能帮助我改善特定算法,以解决上述四个特定问题? 我希望有些人也能从中学到一些东西,毕竟我认为不仅提出问题的人也应该学习。:)

5
如何在Mathematica中找到Waldo?
这个周末困扰着我:解决那些“沃尔多在哪里”的好方法是什么? [ 北美以外的'Wally' ]使用Mathematica(图像处理和其他功能)感到困惑吗? 到目前为止,这是我所拥有的功能,该功能通过使某些非红色变暗来稍微降低视觉复杂性: whereIsWaldo[url_] := Module[{waldo, waldo2, waldoMask}, waldo = Import[url]; waldo2 = Image[ImageData[ waldo] /. {{r_, g_, b_} /; Not[r > .7 && g < .3 && b < .3] :> {0, 0, 0}, {r_, g_, b_} /; (r > .7 && g < .3 && b …

22
二维阵列中的峰检测
我正在帮助兽医诊所测量狗爪下的压力。我使用Python进行数据分析,但现在我一直试图将爪子分成(解剖)子区域。 我制作了每个爪子的2D数组,其中包含爪子随时间推移已加载的每个传感器的最大值。这是一个爪子的示例,我使用Excel绘制了要“检测”的区域。这些是传感器周围具有最大最大值的2 x 2框,它们的总和最大。 因此,我尝试了一些实验,并决定只查找每一列和每一行的最大值(由于爪子的形状而不能朝一个方向看)。这似乎可以很好地“检测”到各个脚趾的位置,但是它也标记了相邻的传感器。 那么,告诉Python我想要这些最大值中的哪一个是最好的方法呢? 注意:2x2的正方形不能重叠,因为它们必须是单独的脚趾! 同样我以2x2为方便,欢迎使用任何更高级的解决方案,但我只是人类运动的科学家,所以我既不是真正的程序员也不是数学家,所以请保持“简单”。 这是可以加载的版本np.loadtxt 结果 因此,我尝试了@jextee的解决方案(请参见下面的结果)。如您所见,它在前爪上非常有效,但在后腿上效果较差。 更具体地说,它无法识别出第四脚趾的小峰。显然,这是循环固有的固有观点,即循环从上到下朝向最低值,而不考虑此位置。 谁会知道如何调整@jextee的算法,以便它也能够找到第四个脚趾? 由于我尚未处理其他任何试验,因此无法提供其他任何样品。但是我之前提供的数据是每只爪子的平均值。该文件是一个数组,其中最大9爪的数据按它们与板接触的顺序排列。 此图显示了它们如何在空间上分布在板上。 更新: 我已经为有兴趣的任何人建立了博客,并为SkyDrive设置了所有原始测量值。因此,对于任何需要更多数据的人:给您更多的权力! 新更新: 因此,在获得帮助后,我遇到了有关爪子检测和爪子分类的问题,我终于能够检查每个爪子的脚趾检测!事实证明,除了爪子大小像我自己的示例中的爪子一样,它在任何情况下都无法正常工作。事后看来,如此随意地选择2x2是我自己的错。 这是一个出问题的好例子:指甲被识别为脚趾,而“脚跟”是如此之宽,被识别两次! 脚掌太大,因此尺寸为2x2,没有重叠,会导致两次检测到一些脚趾。相反,在小型犬中,它通常找不到第5个脚趾,我怀疑这是2x2区域太大造成的。 在尝试所有测量的当前解决方案后得出了一个惊人的结论:几乎对我所有的小型犬来说,它都找不到第五个脚趾,而在大型犬的50%以上的撞击中,它会发现更多! 所以很明显我需要更改它。我自己的猜测是将其大小更改为neighborhood较小的大小(对于小型狗)和较大的大小(对于大型狗)。但是generate_binary_structure不允许我更改数组的大小。 因此,我希望其他人对脚趾的定位有更好的建议,也许脚趾的面积与爪子的大小成正比?

10
如何检测圣诞树?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 去年关闭。 可以使用哪些图像处理技术来实现检测以下图像中显示的圣诞树的应用程序? 我正在寻找可以在所有这些图像上使用的解决方案。因此,需要训练haar级联分类器或模板匹配的方法不是很有趣。 我正在寻找可以使用任何编程语言编写的东西,只要它仅使用开源技术即可。该解决方案必须使用此问题上共享的图像进行测试。有6个输入图像,答案应显示每个图像的处理结果。最后,对于每个输出图像,必须绘制红线以包围检测到的树。 您将如何以编程方式检测这些图像中的树木?

10
表示并解决给定图像的迷宫
代表并解决给定图像的迷宫的最佳方法是什么? 给定JPEG图像(如上所示),读入,将其解析为某种数据结构并解决迷宫的最佳方法是什么?我的第一个本能是逐像素读取图像并将其存储在布尔值列表(数组)中:True对于白色像素,False对于非白色像素(可以丢弃颜色)。这种方法的问题在于图像可能不是“像素完美”的。我的意思只是说,如果墙壁上的某处有白色像素,可能会产生意外的路径。 另一种方法(经过一番思考后才想到)是将图像转换为SVG文件-SVG文件是在画布上绘制的路径的列表。这样,可以将路径读入相同种类的列表(布尔值),其中True表示路径或墙壁,False表示可移动的空间。如果转换不是100%准确,并且不能完全连接所有墙,从而产生间隙,则此方法会出现问题。 转换为SVG的另一个问题是这些线不是“完美”的直线。这导致路径是三次贝塞尔曲线。使用由整数索引的布尔值列表(数组),曲线将不易转移,并且必须计算曲线上直线的所有点,但不会与列表索引完全匹配。 我假设虽然其中一种方法可能会(虽然可能不会)起作用,但考虑到如此大的图像,它们的效率很低,并且存在更好的方法。如何做到最好(最有效和/或最低复杂度)?有没有最好的方法? 然后是迷宫的解决。如果我使用前两种方法中的任何一种,则基本上将得到一个矩阵。根据该答案,表示迷宫的一种好方法是使用树,而使用A *算法来解决它的好方法。一个人如何根据图像创建一棵树?有任何想法吗? TL; DR 解析的最佳方法?变成什么数据结构?所述结构将如何帮助/阻碍解决? 更新 我已尝试使用numpy@Thomas建议的方式实现@Mikhail用Python编写的内容。我认为该算法是正确的,但无法正常运行。(下面的代码。)PNG库是PyPNG。 import png, numpy, Queue, operator, itertools def is_white(coord, image): """ Returns whether (x, y) is approx. a white pixel.""" a = True for i in xrange(3): if not a: break a = image[coord[1]][coord[0] * 3 + i] > …

10
建议使用ImageMagick压缩JPG文件
我想用ImageMagick压缩JPG图像文件,但大小差异不大。默认情况下,输出大小大于输入大小。我不知道为什么,但是在添加了一些+ profile选项并设置了质量后,我可以得到较小的尺寸,但仍然与原始尺寸相似。 输入图像为255kb,处理后的图像为264kb(使用+ profile删除配置文件并将质量设置为70%)。有什么办法可以将该图像至少压缩到150kb?那可能吗?我可以使用哪些ImageMagick选项?

11
什么是最好的Java图像处理库/方法?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 改善这个问题 我同时使用JAI媒体API和ImageMagick吗? ImageMagick存在一些可伸缩性问题,基于JNI的JMagick也没有吸引力。与ImageMagick相比,JAI执行大小调整操作时的质量结果较差。 有谁知道过任何出色的开源或商业工具,它们都是本机Java并能提供高质量的结果?



3
如何改善我的爪子检测?
在上一个关于在每个爪子中寻找脚趾的问题提出之后,我开始加载其他测量值以查看其承受力。不幸的是,我很快就遇到了以下步骤之一的问题:识别爪子。 您会看到,我的概念证明基本上随时间推移获取了每个传感器的最大压力,并且将开始寻找每一行的总和,直到找到!= 0.0。然后,它对列执行相同的操作,并且一旦发现多于2的行又为零。它将最小和最大行和列值存储到某个索引。 正如您在图中看到的,在大多数情况下,此方法效果很好。但是,这种方法有很多缺点(除了非常原始之外): 人类可以拥有“空心脚”,这意味着足迹本身内有几行空行。由于我担心这种情况也会发生在(大型)狗身上,因此我在切断爪子之前至少等待了2或3行。 如果另一个联系人在到达数个空行之前在另一列中建立了联系,则会扩大面积。我认为我可以比较这些列,看看它们是否超过某个值,它们必须是单独的爪子。 当狗很小或走得更快时,问题会变得更糟。发生的情况是前爪的脚趾仍在接触,而后爪的脚趾刚开始在与前爪相同的区域内接触! 使用我的简单脚本,它将无法将这两个部分分开,因为它必须确定该区域的哪些帧属于哪个爪子,而目前,我只需要查看所有帧上的最大值即可。 它开始出错的示例: 因此,现在我正在寻找识别和分离爪子的更好方法(在此之后,我将要解决确定它是哪只爪子的问题!)。 更新: 我一直在努力地实现Joe(真棒!)的答案,但是我很难从文件中提取实际的爪子数据。 当应用于最大压力图像时(见上文),coded_pa​​ws显示了所有不同的爪子。但是,解决方案遍历每一帧(以分离重叠的爪子)并设置四个Rectangle属性,例如坐标或高度/宽度。 我无法弄清楚如何获取这些属性并将其存储在可以应用于测量数据的某个变量中。因为我需要知道每个爪子的位置,所以在每个框架中它的位置是什么,并将其耦合到哪个爪子(前/后,左/右)。 那么,如何使用Rectangles属性为每个爪子提取这些值? 我在公共Dropbox文件夹(示例1,示例2,示例3)中有问题设置中使用的度量。对于有兴趣的人,我还建立了一个博客来让您保持最新:-)

7
简单快速的图像相似度比较方法
我需要一种简单快速的方法来比较两个图像的相似性。也就是说,如果它们包含完全相同的内容,但背景可能略有不同,并且可能会移动/调整几个像素,则我希望获得较高的值。 (更具体的说,这很重要:一张图片是图标,另一张图片是屏幕截图的子区域,我想知道该子区域是否恰好是图标。) 我手头有OpenCV,但我仍然不习惯。 到目前为止,我考虑过的一种可能性是:将两张图片分成10x10个单元格,然后针对这100个单元格中的每一个,比较颜色直方图。然后,我可以设置一些虚构的阈值,如果我得到的值高于该阈值,那么我认为它们是相似的。 我还没有尝试过这种方法,但是我想它已经足够了。这些图像已经非常相似(在我的用例中),因此我可以使用很高的阈值。 我猜有很多其他可行的解决方案,它们或多或少都可以工作(因为任务本身非常简单,我只想在相似性非常高的情况下才检测相似性)。你有什么建议? 关于从图像中获取签名/指纹/哈希,存在一些非常相关/相似的问题: OpenCV / SURF如何从描述符中生成图像哈希/指纹/签名? 图像指纹以比较许多图像的相似性 几乎重复的图像检测 OpenCV:指纹图像并与数据库比较。 更多,更多,更多,更多,更多,更多,更多 另外,我偶然发现了这些实现具有指纹功能的实现: 酸碱度 imgSeek(GitHub repo)(GPL)基于论文快速多分辨率图像查询 图像匹配。与我要搜索的内容非常相似。与pHash相似,Goldberg等人基于对任何类型图像的图像签名。使用Python和Elasticsearch。 智商数据库 ImageHash。支持pHash。 映像重复数据删除器(imagededup)。支持CNN,PHash,DHash,WHash,AHash。 关于感知图像哈希的一些讨论:这里 有点题外话:存在许多创建音频指纹的方法。MusicBrainz是一项提供基于指纹的歌曲查找功能的网络服务,其Wiki中有很好的概述。他们现在正在使用AcoustID。这是用于查找完全一致(或几乎完全一致)的匹配项。要查找类似的匹配项(或者如果您仅有一些片段或高噪音),请查看Echoprint。一个相关的SO问题在这里。因此,似乎音频已解决。所有这些解决方案都运行良好。 关于模糊搜索的一般问题在这里出现。例如,存在局部敏感的哈希和最近邻居搜索。

16
UIImage:调整大小,然后裁剪
从字面上看,我已经将自己的脸庞撞了好几天,尽管我一直觉得自己正处于启示的边缘,但我根本无法实现自己的目标。 我认为,在设计的概念阶段之前,要想从iPhone的相机或照片库中抓取图像,然后使用相当于“ 宽高比填充”选项的功能将图像缩小到指定的高度,将是一件微不足道的事情。 UIImageView(完全在代码中),然后裁剪掉传递的CGRect中不适合的所有内容。 从相机或库中获取原始图像非常简单。我对其他两个步骤证明多么困难感到震惊。 所附图像显示了我正在尝试实现的目标。有人能好心地握住我的手吗?到目前为止,我发现的每个代码示例似乎都粉碎了图像,颠倒了图像,看起来像胡扯,划界,否则就无法正常工作。

19
Android SDK的快速位图模糊
目前,在我正在开发的Android应用程序中,我正在遍历图像的像素以使其模糊。在640x480的图片上,这大约需要30秒。 在Android Market中浏览应用程序时,我碰到了一个包含模糊功能的应用程序,它们的模糊速度非常快(例如5秒),因此它们必须使用另一种模糊方法。 除了遍历像素之外,有人知道更快的方法吗?

6
OpenCV C ++ / Obj-C:检测一张纸/正方形检测
我在测试应用程序中成功实现了OpenCV平方检测示例,但现在需要过滤输出,因为它很乱-还是我的代码错误? 我感兴趣的纸歪斜减少(如的四个角点是),并进一步处理... 输入输出: 原始图片: 点击 码: double angle( cv::Point pt1, cv::Point pt2, cv::Point pt0 ) { double dx1 = pt1.x - pt0.x; double dy1 = pt1.y - pt0.y; double dx2 = pt2.x - pt0.x; double dy2 = pt2.y - pt0.y; return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10); …

2
使用ImageMagick“区分”图像
如何获得两个图像之间的差异?我有原始图像。有人在原始图像的精确副本上写过字。现在,我需要将原始图像与图像上的文字进行比较,并仅提取图像格式的文字。 例子:我有一张房子的照片。有人抄袭并写下“你好!” 在副本上。我想以某种方式比较这两张图片,移走房子,然后留下“ Hello!”字样的图片。 ImageMagick有可能吗?我知道有几种方法可以得出图像之间的统计差异,但这不是我想要的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.