我正在尝试为一些行为心理学研究提出一个评分系统.
我要求人们在图形输入板上画一封信然后追踪它.我想评估这种痕迹的准确性.所以,你绘制任何字母('a'),然后你再做一次,然后我根据它与你第一次绘画时的相似程度得分.附图存储为像素位置.
准确度被评估为与原始信件的接近程度.该方法不需要允许缩放,旋转或位置改变.从概念上讲,它就像两条线之间的区域,只有线条高度不规则,所以积分(据我所知)不会起作用.
我在MATLAB写作,但任何概念上的帮助将不胜感激.我已经尝试将绘制的所有像素之间的最小距离求和,但这给出了良好放置的单点的好(低)分数.
这一定是以前做过的,但我的搜索没有运气.任何帮助非常感谢!
---部分解决方案使用@Bill建议的方法.不起作用,因为bwdist渐变太陡峭.而不是Bill显示的漂亮的第二张图片,它看起来更像是原版.
%% Letter to image
im = zeros(1080,1920,3); % The screen (possible pixel locations)
% A small square a bit like the letter 'a', a couple of pixels wide.
pixthick = 5;
im(450:450+pixthick,[900:1100],:) = 1;
im(550:550+pixthick,[900:1100],:) = 1;
im([450:550],900:900+pixthick,:) = 1;
im([450:570],1100:1100+pixthick,:) = 1;
subplot(2,1,1); imagesc(im); %% atransbw = bwdist(im(:,:,1)<0.5); subplot(2,1,2);
imagesc(atransbw);
Run Code Online (Sandbox Code Playgroud) 我在Matlab做vlfeat,我在这里关注这个问题.
以下是我的简单测试图像:
左图:

正确的图像:
我在这里用2个简单的图像做了一个简单的测试(右图像只是左边的旋转版本),我得到了相应的结果:

它有效,但我还有一个要求,即匹配两个图像的SIFT点并显示它们,如下所示:

我确实理解vl_ubcmatch返回2个匹配索引数组,并且映射它们不是一个问题,哪个点到达两个图像上的哪个点.但是,我目前陷入了matlab的程序.我找到了这个.但这只有在子图保持这种情况下才有效.将图像添加到子图中时,大小会更改,并且标准化失败.
这是我的代码:(im和im2是图像.f,d和f2,d2分别是来自vl_sift函数的帧和描述符,来自2个图像)
[matches score] = vl_ubcmatch(d,d2,threshold);%threshold originally is 1.5
if (mode >= 2)%verbose 2
subplot(211);
imshow(uint8(im));
hold on;
plot(f(1,matches(1,:)),f(2,matches(1,:)),'b*');
subplot(212);
imshow(uint8(im2));
hold on;
plot(f2(1,matches(2,:)),f2(2,matches(2,:)),'g*');
end
if (mode >= 3)%verbose 3
[xa1 ya1] = ds2nfu( f(1,matches(1,:)), f(2,matches(1,:)));
[xa2 ya2] = ds2nfu( f2(1,matches(2,:)), f2(2,matches(2,:)));
for k=1:numel(matches(1,:))
xxa1 = xa1(1, k);
yya1 = ya1(1, k);
xxa2 = xa2(1, k);
yya2 = ya2(1, k);
annotation('line',[xxa1 xxa2],[yya1 yya2],'color','r');
end
end
Run Code Online (Sandbox Code Playgroud)
上面的代码产生了这个:

我认为subplot不是一个很好的方法来做这样的事情.在Matlab中有更好的方法吗?如果可能的话,我想要一个类似于空面板的东西,我可以绘制我的图像,自由地绘制线条和自由缩放,就像以OpenGL风格绘制2D游戏一样.
我想找到/检查主图像中的subImage /模板图像,并想知道它的坐标,
我使用了以下链接中给出的代码来实现它,
如果模板图像的大小与较大图像的匹配部分的大小完全相同,则它工作正常.
但是如果子图像按比例缩小或放大而不是匹配较大图像的一部分,则不能正确地给出结果.
opencv image-comparison machine-learning computer-vision template-matching
说我有一个非常简单的图像或形状,如这个棒图画:

我还有一个其他简单图像的库,我想比较第一个图像并确定最接近的匹配:

请注意,这两名男子并不完全相同,但相似.
我希望能够将第一个图像与我的库中的每个图像进行比较,直到找到一个相当接近的匹配.如有必要,我的图像库可能包含同一图像的多种变体,以帮助确定我拥有的图像类型.例如:

我的问题是这是否是OpenCV能够做到的事情?以前是否已经完成,如果是的话,你能指出我的一些例子的方向吗?非常感谢您的帮助.
编辑:通过我的搜索,我发现了许多比较图像的人的例子,甚至是比较已被拉伸或歪斜的图像的人:例如:检查图像与OpenCV的相似性.不幸的是,正如你所看到的,我的图像不仅仅是翻译(旋转/倾斜/拉伸)版本 - 它们实际上是不同的图像,尽管它们非常相似.
我正在尝试比较php中的形状.我有一个包含大量图像的数据库,在这些图像中有一个形状(大部分位于图像的中心).现在我想将这些图像与Shape进行比较.
输入是一个形状(png),其大小与数据库中的图像完全相同.
我做了一个函数,它采用了形状的颜色并将其变为黑色(背景为白色)
我可以比较图像中的每个像素并跟踪多少黑色像素是相同的,但这将需要大量的CPU,我认为它不会每次都有效.
我也可以使用像python这样的另一种语言,但我真的想在PHP中解决这个问题.有没有人有想法以实际的方式做到这一点?
问题" 比较php中的2个图像 "中的anwser与我期望的不同.我需要比较图像的一部分(在示例中是白色的背景,但可能是背景中有一些噪点)
*注意:尽管这篇文章是关于双线性插值的,但我还是保持标题的一般性,并提供了更多信息,以防有人对如何更好地做到这一点有所了解
为了创建单词搜索解决程序,我一直难以实现从图像中识别字母的方法。出于主要出于教育目的,也出于便携性的目的,我一直在尝试使用不使用库的方法。可以假设,将要拾取字符的图像除了拼图之外没有任何其他内容。尽管此页面只能识别少量字符,但我一直在用它来指导我的工作,这一个也一样 正如文章所建议的,我将每个字母的图像缩小为5x5,以将每个未知字母与之进行比较。通过使用双线性重采样将未知数缩小到5x5,并对已知和未知图像中每个相应像素的强度差的平方求和,我获得了最大的成功。为了尝试获得更准确的结果,我还添加了每个图像的上半部分和下半部分的宽度:高度比率和白色:黑色像素比率之差的平方。然后,将具有与未知图像最接近的“差异分数”的已知图像视为未知字母。问题在于,这似乎只有大约50%的准确性。为了改善这一点,我尝试使用较大的样本(而不是5x5,我尝试使用15x15),但是事实证明效果不佳。我还尝试浏览已知和未知的图像,寻找特征和形状,然后基于具有相同数量的相同特征的两个图像确定匹配项。例如,识别并计数了以下形状:?代表黑色像素)。事实证明,这种方法不如原始方法有效。
? ? ? ?
? ?
Run Code Online (Sandbox Code Playgroud)
因此,这里是一个示例:加载以下图像:
然后,该程序通过使用面积总和表确定每个像素的强度是否高于或低于11x11平方的平均强度,将其转换为单色,修复倾斜并通过识别相对相等间距的区域来挑选字母。然后,我使用相交的水平和垂直空间来大致了解每个字符的位置。接下来,我要确保在每个方块中都包含整个字母,方法是在原始方块的上方,下方,左侧和右侧逐行查找,直到该方块的边界未检测到深色像素为止。
然后,我将每个字母都重新采样,然后将其与已知图像进行比较。
*注意:已知样本使用的字体大小为12,使用双线性插值法在photoshop中重新缩放为5x5。
这是一个成功匹配的示例:选出以下字母:
缩小为:
看起来像
远道而来。这已成功匹配已知的N个样本:
这是失败的比赛:
被挑选出来并缩小为:
毫不奇怪,它与已知的R样本不匹配
我更改了图像的拾取方式,以致如上图所示,该字母不会被截断,因此我认为问题出在缩小图像上。目前,我正在使用双线性插值对图像进行重新采样。要了解究竟是如何工作原理与采样我提到的第二个答案的这个职位,并用下面的代码上来。以前,我已经测试过此代码可以正常工作(至少达到“看起来不错”的程度),因此它可能是引起问题的多种因素的组合。
void Image::scaleTo(int width, int height)
{
int originalWidth = this->width;
int originalHeight = this->height;
Image * originalData = new Image(this->width, this->height, 0, 0);
for (int i = 0; i < this->width * this->height; i++) {
int x = i % this->width;
int y = i / this->width;
originalData->setPixel(x, y, …Run Code Online (Sandbox Code Playgroud) 我正在运行python代码来检查Quora和Twitter用户个人资料照片的相似性,但是当图像相同时我没有得到正面的结果。
这是用于比较两个图像的代码:
path_photo_quora= "/home/yousuf/Desktop/quora_photo.jpg"
path_photo_twitter="/home/yousuf/Desktop/twitter_photo.jpeg"
if open(path_photo_quora,"rb").read() == open(path_photo_twitter,"rb").read():
print('photos profile are identical')
Run Code Online (Sandbox Code Playgroud)
尽管图像相同,但控制台未打印“照片配置文件相同”,我该怎么办?
python image-comparison image-processing user-profile image-scaling
我希望有人能够帮助我.
我有一对黑白图像是由扫描文本和大型扫描仪产生的(结果文件高达500M).扫描的文本几乎相同,我需要检查是否有任何实质性差异.
显然我不能逐个像素地进行比较,因为扫描到bmp的相同图像每次扫描时会给我一个稍微不同的结果.
有没有人知道我可以购买或下载的任何库 - 开源或纪念 - 并围绕它构建.NET应用程序.
预先感谢您的帮助.海伦.
有没有一种快速简便的方法来进行这种比较?
我发现很少有来自stackoverflow的图像比较问题,但没有一个真正证明了这个问题的答案.
我的文件系统中有图像文件,还有一个从URL中获取图像的脚本.我想检查url中的图像是否与磁盘上的图像相同.通常我会将磁盘和url中的图像加载到PIL对象并使用我发现的以下函数:
def equal(im1, im2):
return ImageChops.difference(im1, im2).getbbox() is None
Run Code Online (Sandbox Code Playgroud)
但是,如果使用PIL将图像保存到磁盘,即使将质量设置为100,它也会被压缩,但这不起作用im1.save(outfile,quality=100).
我的代码目前正在关注:http: //pastebin.com/295kDMsp 但图像总是最终重新保存.
python diff image-comparison image-processing python-imaging-library
我有大量的图像(数十万),对于每一个,我需要说明它的右上角是否有水印.水印总是相同的并且处于相同的位置.它采用带有符号和一些文本的功能区的形式.我正在寻找简单快速的方法来做到这一点,理想情况下,不使用SciPy(因为它在我正在使用的服务器上不可用 - 但它可以使用NumPy)
到目前为止,我已经尝试使用PIL和裁剪功能来隔离图像中应该有水印的区域,然后将直方图与RMS函数进行比较(请参阅http://snipplr.com/view/757/compare-两个pil-images-in-python /).由于两个方向都存在很多错误,因此效果不佳.
任何想法将不胜感激.谢谢
python image-comparison image-processing computer-vision python-imaging-library