Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Поиск изображения по образцу (https://forum.antichat.xyz/showthread.php?t=139179)

Hwma 03.09.2009 18:18

Поиск изображения по образцу
 
Помогите пожалуйста составить алгоритм поиска изображения в изображении. Есть изображение (картинка) и есть образец другого изображения, который может присутствовать на исходном изображении. Каким образом можно найти этот образец на изображении? Придумал пока только такой вариант, что из образца возьму одну строчку шириной в 1 пиксель и буду попиксельно читать исходное изображение в поисках этой строчки. А как найти прямоугольник?

scrat 03.09.2009 19:09

нейросети, детка

St0nX 03.09.2009 21:32

Для чего тебе такой алгоритм? Если для распознания капчи то тебе в сторону скелетизации изображения копать надо...

St0nX 03.09.2009 21:53

Можно попробовать представить секцию в Image в файле bmp в виде матрицы и искомое изображение тоже. Далее блоками сравнивать и сдвигать.

AKYLA 04.09.2009 04:30

На PHP что-то подобное есть
http://habrahabr.ru/blogs/php/55926/

А вообще нейросети конечно нужно, если что посложнее.

Вот кусок на делфи, с какой-то проги, там по базе с фотками сравнивается картинка которую ты подсовываешь:

Код:

Procedure CompareBitmap(Const BitmapA, BitmapB:  TBitmap;
                          VAR Total, Sim, Diff:  Integer);
// Total:total des pixel, Sim:Pixels similaires, Diff:Pixels dirrfents
    Type

      TRGBTripleArray =  ARRAY[WORD] OF TRGBTriple;
      pRGBTripleArray =  ^TRGBTripleArray;

    Var
      i  :  INTEGER;
      j  :  INTEGER;
      RowA:  pRGBTripleArray;
      RowB:  pRGBTripleArray;

  begin

    Assert( (BitmapA.width  = BitmapB.width) AND
            (BitmapA.height = BitmapB.height),  'Different sizes');


    BitmapA.PixelFormat := pf24bit;
    BitmapB.PixelFormat := pf24bit;

    Total  := BitmapA.width * BitmapA.height;

    SIM  := 0;

    Diff := 0;

    For j := 0 to BitmapA.Height-1 do
    begin
      RowA := BitmapA.Scanline[j];
      RowB := BitmapB.Scanline[j];
// pour i do 0 jusqu' la largeur de BitmapA alors
      For i := 0 to BitmapA.Width-1 DO
      begin



        If  RowA[i] = RowB[i] Then

        inc(Sim)

        else inc(Diff)


      End

    End
end;


Gar|k 05.09.2009 13:12

совет - копай в сторону OpenCV

imbd852 05.09.2009 15:25

it's temptetion
 
you guys are really tempt me!


















--------------------------------------------------------------------------------------------
lace front wigs wedding dress synthetic wigs

Hwma 06.09.2009 00:20

Придумал такой алгоритм, берется первая строчка пикселов изображения, которое ищем, построчно в исходном изображении ищем ету строчку, как только нашли, вырезаем из исходного изображения прямоугольник с размерами искомого изображения и левым верхним углом начинающимся в начале найденной пиксельной строки, ну и затем сравниваем два етих прямоугольника.


Время: 08:27