Tag: image processing

简单而快速的方法来比较图像的相似性

我需要一个简单而快速的方法来比较两个图像的相似性。 即我想获得高价值,如果他们包含完全相同的东西,但可能有一些略有不同的背景,并可能被移动/调整了几个像素。 (更具体地说,如果这很重要:一张图片是一个图标,另一张图片是截图的一个分区,我想知道这个分区是否正好是图标。) 我手边有OpenCV ,但我还是不习惯。 到目前为止,我考虑过的一种可能性是:将这两幅图片分成10×10个单元格,对于这100个单元格中的每一个,比较颜色直方图。 那么我可以设置一些补偿阈值,如果我得到的价值高于这个阈值,我认为它们是相似的。 我还没有尝试过,但它的效果如何,但我想这将是足够好的。 图像已经非常相似(在我的使用情况),所以我可以使用一个相当高的阈值。 我想有很多其他可能的解决scheme,这可能会或多或less地工作(因为任务本身非常简单,因为我只是想检测相似性,如果他们真的很相似)。 你会build议什么? 有几个关于从图像获取签名/指纹/散列的非常相关/类似的问题: OpenCV / SURF如何从描述符中生成图像哈希/指纹/签名? 图像指纹比较许多图像的相似性 近乎重复的图像检测 OpenCV:指纹图像,并与数据库进行比较 。 更多 , 更多 , 更多 , 更多 , 更多 , 更多 另外,我偶然发现了这些具有获取指纹function的实现: pHash imgSeek ( GitHub repo )(GPL)基于论文的Fast Multiresolution Image Querying 图像匹配 。 非常相似,我正在寻找。 与pHash类似,基于任何types图像的图像签名,Goldberg等人 使用Python和Elasticsearch。 iqdb ImageHash 。 支持pHash。 关于感知图像哈希的一些讨论: 在这里 有点偏离:有很多方法来创buildaudio指纹。 MusicBrainz是一种为歌曲提供基于指纹的查询的networking服务, 在他们的wiki中有很好的概述 。 […]

如何缩放BufferedImage

继javadoc之后,我试图缩放一个BufferedImage而没有成功,这里是我的代码: BufferedImage image = MatrixToImageWriter.getBufferedImage(encoded); Graphics2D grph = image.createGraphics(); grph.scale(2.0, 2.0); grph.dispose(); 我不明白为什么它不工作,有什么帮助?

高品质的图像缩放库

我想在C#中调整图像的质量,就像Photoshop一样好。 有没有任何C#image processing库可用来做这件事情?

如何将RGB图像转换为灰度,但保持一种颜色?

我试图创造一个类似于罪恶城市或其他电影的效果,他们删除除了图像以外的所有颜色。 我有一个RGB图像,我想要转换为灰度,但我想保持一种颜色。 这是我的照片: 我想保持红色。 其余的应该是灰度。 这是我的代码输出到目前为止(你可以看到,这些地区是正确的,我不知道他们为什么是白色,而不是红色): 这是我的代码到目前为止: filename = 'roses.jpg'; [cdata,map] = imread( filename ); % convert to RGB if it is indexed image if ~isempty( map ) cdata = idx2rgb( cdata, map ); end %imtool('roses.jpg'); imWidth = 685; imHeight = 428; % RGB ranges of a color we want to keep redRange = [140 […]

image processing:“可口可乐jar”识别的algorithm改进

过去几年中我最感兴趣的项目之一是关于image processing的项目。 我们的目标是build立一个能够识别可口可乐“jar头”的系统 (注意,我强调“jar头”这个词,你会在一分钟内看到为什么)。 您可以在下面看到一个示例,可以在具有缩放和旋转的绿色矩形中识别。 项目的一些限制: 背景可能非常嘈杂。 jar头可以有任何规模或旋转 ,甚至方向(在合理范围内)。 图像可能有一定程度的模糊性(轮廓可能不完全是直的)。 图像中可能有可口可乐瓶,algorithm只能检测jar头 ! 图像的亮度可能会有很大的变化(所以你不能在颜色检测上“太多”)。 jar子可以部分隐藏在侧面或中间,可能部分隐藏在瓶子后面。 在图像中完全没有可能 ,在这种情况下,你必须找不到任何东西,并写下这样的消息。 所以你最终可能会遇到这样棘手的事情(在这种情况下,我的algorithm完全失败): 前段时间我做了这个项目,做了很多乐趣,而且我有一个体面的实现。 以下是关于我的实现的一些细节: 语言 :使用OpenCV库在C ++中完成。 预处理 :对于图像预处理,即将图像转换为更加原始的forms给予algorithm,我使用了2种方法: 将颜色区域从RGB更改为HSV,并根据“红色”色调进行过滤,在某个阈值以上进行饱和以避免类橙色,并对低值进行过滤以避免产生深色调。 最终的结果是一个二进制的黑白图像,其中所有的白色像素将代表匹配这个阈值的像素。 很明显,图像中仍然有很多垃圾,但是这会减less你需要处理的尺寸数量。 使用中值滤波进行噪声滤波(取所有邻居的中值像素值并用此值replace像素)以降低噪声。 使用Canny边缘检测filter在2个先例步骤之后获得所有项目的轮廓。 algorithm :我为这个任务select的algorithm本身是从这个真棒书籍特征提取,被称为广义霍夫变换 (有别于正则霍夫变换)。 它基本上说了几件事情: 你可以在不知道parsing方程的情况下在空间中描述一个物体(这里就是这种情况)。 它能抵抗像缩放和旋转等图像变形,因为它将基本上针对比例因子和旋转因子的每个组合来testing图像。 它使用algorithm将“学习”的基本模型(模板)。 剩余在轮廓图像中的每个像素将基于从模型中学习的内容投票给另一像素,该像素将被认为是对象的中心(就重力而言)。 最后,最后得到一个热图,例如在这里jar子轮廓的所有像素都会投票给它的引力中心,所以你将会在相同的像素中得到很多的投票。中心,并将在热图中看到一个高峰,如下所示: 一旦你有了这一点,一个简单的基于阈值的启发式可以给你的中心像素的位置,从中你可以导出的规模和旋转,然后绘制你的小矩形周围(最终规模和旋转因素显然是相对于你原始模板)。 理论上至less… 结果 :现在,虽然这种方法在基本案例中起作用,但在一些领域却严重缺乏: 这是非常缓慢 ! 我没有强调这一点。 需要几乎整整一天来处理30个testing图像,显然是因为我有一个非常高的旋转和平移比例因子,因为一些jar子很小。 当图像中的瓶子完全丢失时,由于某种原因,几乎总是find瓶子而不是jar子(也许是因为瓶子更大,因此像素更多,因此票数更多) 模糊的图像也是不好的,因为投票结果在中心周围的随机位置像素,从而结束了一个非常嘈杂的热图。 翻译和旋转方面的差异已经达到了,但是没有定位,这意味着没有直接面对相机目标的一个jar子没有被识别。 你能帮助我改进我的具体algorithm,只使用OpenCVfunction来解决上述四个具体问题吗? 我希望有些人也会从中学到一些东西,毕竟我不仅想问问题的人应该学习。 🙂

如何把这些图像放在一起?

我有200时间点。 对于每个时间点,有一个图像,其大小是40*40 double ,对应于这个时间点。 例如, image 1对应于time point 1 ; image k对应于time point k ( k = 1,2,…,200 )。 时间点为T = 1:200 ,图像命名为Image_T , Image_1 , Image_2等 我想把所有这200张图片放在一起。 最终尺寸是40*40*200双。 最终的图像看起来像fMRI图像( fmri_szX = 40 , fmri_szY = 40和fmri_szT = 200 )。 如何实现? 谢谢!

OpenCV C ++ / Obj-C:检测一张纸/方形检测

我在testing应用程序中成功实现了OpenCV方块检测示例,但现在需要过滤输出,因为它很安静 – 或者是我的代码错误? 我对纸张的四个angular落感兴趣,以减less偏斜(像那样 )和进一步的处理… input输出: 原始图像: 点击 码: 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); } – […]

裁剪UIImage

我有一些调整图像大小的代码,这样我就可以得到图像中心的缩放块 – 我使用这个来获取UIImage并返回一个图像的小方形表示,类似于专辑视图中的内容的照片应用程序。 (我知道我可以使用UIImageView并调整裁剪模式以获得相同的结果,但这些图像有时显示在UIWebViews )。 我已经开始注意到这个代码中的一些崩溃,我有点困难。 我有两个不同的理论,我想知道是否在基地。 理论1)我通过绘制到我的目标尺寸的离屏图像上下文来实现裁剪。 由于我想要图像的中心部分,因此我将传递给drawInRect的CGRect参数设置为大于图像上下文边界的东西。 我希望这是犹太教,但我是否试图画出我不应该接触的其他记忆? 理论2)我在后台线程中做所有这些。 我知道有部分UIKit被限制在主线程中。 我假设/希望绘制到屏幕外视图不是其中之一。 我错了吗? (哦,我怎么会错过NSImage's drawInRect:fromRect:operation:fraction: method。)