Как я могу определить / рассчитать наличие маленьких картинок внутри большей картинки? - PullRequest
7 голосов
/ 13 июля 2011

Что я пытаюсь сделать в PHP с помощью GD или ImageMagick, так это:

У меня есть одно большое изображение (скажем, 2000 x 2000 пикселей). Я хотел бы проверить, появляется ли второе, более маленькое изображение (скажем, 50 x 50 пикселей) где-то внутри большего изображения, и какой процент площади составляет совпадение .. Так, например, в этом месте на увеличенном изображении соответствует 95% совпадению меньшего изображения ..

Возможно ли это? Как этого достичь?

Спасибо !!!!

Ответы [ 3 ]

4 голосов
/ 21 июля 2011

Я быстро взглянул на PHP ImageMagick и GD , и ни у одного из них не было встроенного способа сделать это. Подход может состоять в том, чтобы использовать ImageMagick, чтобы разделить большее изображение на меньшее (такого же размера, как и меньшее) и начать сравнивать их с меньшим.

Однако, я полагаю, это будет очень медленно.

Вы можете сделать это с помощью imagemagick, если вы используете системный вызов в своем коде PHP. Я не знаю, хотите ли вы попробовать это, но вот как это можно сделать:

<?php
//set a bigger time out limit because comparison takes a while
set_time_limit ( 275 ) ;

//the bigger image
$bigimage = "big.bmp";
//the smaller image
$smallimage = "small.bmp";
//result image
$resimg = "/tmp/similarity";

//system call
$output = shell_exec("(compare -metric AE -subimage-search ".$bigimage." ".$smallimage." ".$resimg."  > /dev/null) 3>&1 1>&2 2>&3");

//result is something like "0 @ 251,263"
$res = explode("@",$output);
if($res[0]==0)
{
    echo "Perfect match<br/>";
    $res = explode(",",$res[1]);

    echo "width: ".$res[0];
    echo "<br/>";
    echo "height: ".$res[1];
} else {
    echo "Not match";
}

?>

Я тестировал приведенный выше код в Linux-боксе с XAMPP для Linux 1.7.3a и ImageMagick 6.7.1-0 2011-07-10 Q16.

О сравнении Я использую метрику AE (абсолютная ошибка), которая подсчитывает, сколько пикселей различаются. Результат выводится в поток ошибок (STERR). Подробнее о поиске подизображений в imagemagick вы можете найти здесь .

Удачи:)

1 голос
/ 13 июля 2011

Вот хороший ответ для C #: Как найти одно изображение внутри другого?

Хотя я совершенно уверен, что его можно использовать и для PHP, потому что это всего лишь общий алгоритм, но для сравнения изображений довольно плохая идея.

Также см. Википедию Шаблон соответствия Статья.

0 голосов
/ 14 июля 2011

OK.Если у вас есть $ BigImage и $ SmallImage.

И вы делаете $ Final на основе изображений $ big и $ small.Затем вы можете проверить это с помощью этой функции: http://www.php.net/manual/en/function.getimagesize.php

Если у вас есть только $ FinalImage, и вы хотите отслеживать базу $ smallimage в образе $ Final, тогда «NO WAY» на PHP.

Попробуйте Java.

^ _ ^

...