Как распознать рисунок на картинке?

Тема в разделе "WASM.BEGINNERS", создана пользователем Flasher, 4 фев 2008.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Без понятия с чего начать.
    Может направите в нужную сторону?
    Хочю распознавать для начала циферки на картинках, есть догадки что это и от формата картинкок зависит, т.е. надо их структуру изучать, да ?
    Может какую статью посоветуйте? или исходничок подкините :)
    Спасибо.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Рисунок на картинке распознать можно используя попиксельное описание контура.
    Задача лишь в том, чтобы правильно определить цвета точек контура и фона.
     
  3. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Flasher
    Читай про нейросети

    Там чистая математика
    при чем довольно неприятная...
     
  4. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Flasher
    Распознавание текста - довольно сложная задача, а распознавание картинок... Формат конечно нужно считать пиксельным (внутренний формат хранения графических данных, если это имелось в виду, в данном случае неважен).
    ИМХО достаточно мощным алгоритмом при распознавании текста является фонтанное преобразование.
     
  5. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    crypto
    Фонтанное преобразование - исключительно для распознавания букв без привязки к типу шрифта.

    Flasher
    какой класс рисунка и какой класс изображения на этом рисунке? Ну или хотя бы пара-тройка примеров... А так нельзя ничего советовать.

    Начни с простого - online распознавание символов по векторной форме по готовой базе знаний. Можно использовать сети Кохонена с хорошо подобранным коэффициентом забывания.
     
  6. redcat

    redcat New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    62
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Xerx
    Как правило такие разнородные объекты довольно сложно распознать. Как правило используют сегментацию изображений. Но есть еще и признаки (семантические).
    В идеале должна быть нейросеть с довольно объемной базой об объектах (например если мы распознаем лица - то это база с различными чертами лиц, строение лица (то есть 2 глаза, 1 нос, 1 рот...))

    Вообще в идеале проблемы распознавания объектов (движимых\недвижимых) до сих пор до конца не решены.
     
  8. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    TermoSINteZ
    Вот поэтому я и хочу узнать классы изображений. Вдруг его устроит фотография на фоне презентационного изображения или чертежа. Если он хочет распознавать фотографию на фотографии, то сразу может об этом забыть - судя по вопросу, автор плохо разбирается в данной области.
     
  9. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Рискну предположить что его интересует распозновалка (внимание щас блесну) "КАПЧЕЙ" - тех что применяют для защиты от ботов при регистрации.
     
  10. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    assorted
    Ну, если нужна captcha, то большинство изображений данного типа неплохо распознаются после выполнения обесцвечивания, выделения контуров и свертывания. Хотя могут быть и другие варианты.

    Но мне кажется, что дело не в капчах. Хотя подождем автора...
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Flasher
    Во-первых распознование, можно разделить на два этапа.
    1. Пред обработка
    2. Само распознование.

    Вначале идет сегментация. Также делают выделеня краев, поиск углов. Выделения линия.
    Что касается текста то тут идет отделения текста от фона. После применяют различные подходы. Как то скелетизация(и нетолько для текста). А после идет распознование графа используя нс.
    Можно без скелетизации применять сразу нс. Можно применить класификацеонное дерево. сети Кохонена. Марковскии нейронные сети . И другии разновидности сетей.

    Можно без НС. Сделать простую свертку и выбрать наиболее близкий символ. Хотя в капчах научились с этим бороться путем искажения картинки.

    Есть еще различные преобразования которые применяют для распознования.

    PS. НС имеют и нетакую сложную математику.
     
  12. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Нет конкретной задачи, просто хочется вникнуть в это дело :)
    С НС некогда не работал, думаю Ваши советы мне в ближайщем будущем очень помогут.
    Спасибо господа, дали много, как мне кажется, полезной пищи для раздумия.

    А по поводу captch'eй, - нынешные mail reger'ы используют именно такую НС систему распознавания ? просто интересно :)
     
  13. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Я же говорил куда он клонит.
     
  14. Quick_Shifter

    Quick_Shifter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2008
    Сообщения:
    5
    If you know what are you seaching in a picture, the easyest way I think is to use Fourier transform, and then to make konvolution, and then you will see peaks. You could read Goodman introduction to fourier optics book. I think.
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Что за картинка ?
     
  16. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Clerk
    Я это уже спрашивал, он ответил в посте #12 - человеку "просто интересно".
     
  17. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Flasher
    вникнуть без постановки задачи не получиться, потому что вникать не во что.

    P.S. как минимум надо избавить картинку от ненужных объектов (например: шумов для "КАПТЧЕЙ" ;)))).
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Если картинка состоит из достаточно чётких частей(границ контуров) то описать их довольно просто.
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (Text):
    1. ;При описании контура фигуры следует ввести вектор направления описания:
    2. ;Up=0, Right=1, Down=2, Left=3
    3. ;Функция Point() определяет принадлежность точки сектору(не фону), в этом основная задача
    4.  
    5. VPOINT struct
    6. X   dd ?    ;Горизонтальная координата
    7. Y   dd ?    ;Вертикальная координата
    8. V   db ?    ;Вектор
    9. iFlag   db ?    ;Принадлежность точки сектору
    10. Rect    RECT <>
    11. VPOINT ends
    12.  
    13. NextVector proc uses ebx ecx edi
    14. Local X1:dword,Y1:dword,X2:dword,Y2:dword
    15.     assume edi:ptr VPOINT
    16.     mov eax,[edi].X
    17.     mov ecx,[edi].Y
    18.     mov X1,ebx
    19.     mov Y1,ecx
    20.     mov X2,ebx
    21.     mov Y2,ecx 
    22.     mov al,byte ptr [edi].V
    23.     and al,11b
    24.     jz v_up_
    25.     dec al
    26.     jz v_ri_
    27.     dec al
    28.     jz v_do_
    29. v_le_:
    30.     dec ebx
    31.     mov X1,ebx
    32.     inc [edi].Y
    33.     jmp point_1_
    34. v_up_:
    35.     dec ecx
    36.     mov Y1,ecx
    37.     dec [edi].X
    38.     jmp point_1_
    39. v_ri_:
    40.     inc ebx
    41.     mov X1,ebx
    42.     dec [edi].Y
    43.     jmp point_1_
    44. v_do_:
    45.     inc ecx
    46.     mov Y1,ecx
    47.     inc [edi].X
    48. point_1_:
    49.     invoke Point
    50.     cmp eax,POINT_ERROR
    51.     jz exit_    ;Error
    52.     test eax,eax
    53.     jz point_2_ ;P=False
    54.     dec [edi].V
    55.     jmp exit_
    56. point_2_:
    57.     mov eax,X2
    58.     mov [edi].X,eax
    59.     mov eax,Y2
    60.     mov [edi].Y,eax
    61.     invoke Point
    62.     cmp eax,POINT_ERROR
    63.     jz exit_    ;Error or P=False
    64.     test eax,eax
    65.     jz exit_
    66.     inc [edi].V
    67. exit_:
    68.     and [edi].V,11b
    69.     ret
    70. NextVector endp
    71. ;-------------------------------------------------------------------------------
    72. ;Определяет координаты следующей точки описываемого контура
    73. NextPoint proc uses ebx ecx edi
    74.     assume edi:ptr VPOINT
    75.     mov ebx,[edi].X
    76.     mov ecx,[edi].Y
    77. next_:
    78.     invoke NextVector
    79.     cmp eax,POINT_ERROR
    80.     jz exit_    ;Error
    81.     cmp [edi].X,ebx
    82.     jnz exit_
    83.     cmp [edi].Y,ecx
    84.     jz next_
    85. exit_:
    86.     ret
    87. NextPoint endp
    88. ;-------------------------------------------------------------------------------
    89. ;Полностью описывает контур
    90. Describe proc uses ebx ecx edx edi
    91.     assume edi:ptr VPOINT
    92.     mov ebx,[edi].X
    93.     mov ecx,[edi].Y
    94.     mov  dl,[edi].V
    95. next_:
    96.     invoke NextVector
    97.     cmp eax,POINT_ERROR
    98.     jz exit_    ;Error
    99.     cmp [edi].V,dl
    100.     jnz next_
    101.     cmp [edi].X,ebx
    102.     jnz next_
    103.     cmp [edi].Y,ecx
    104.     jnz next_
    105. exit_:
    106.     ret
    107. Describe endp
     
  20. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Ну, если речь идет о четких границах, то можно применить методы выделения объекта на фоне: волшебная палочка, умные ножницы, сегментация разрезами на графах.