Попиксельно сканировать и определять рисунок картинки

Тема в разделе "WASM.BEGINNERS", создана пользователем Ganzzter, 1 май 2011.

  1. Ganzzter

    Ganzzter New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2011
    Сообщения:
    10
    Если не так назвал тему поправьте возможно это можно сделать по другому, сейчас расскажу задачу, а вы если знаете подскажите пожалуйста.
    программка периодический показывает разные картинки
    круг
    квадрат
    ромб
    треугольник
    многоугольник

    Цвета картинок всегда разные, размер картинки не меняется, а вот сами рисунки на белом фоне иногда уменьшаются либо увеличиваются
    Задача определять что именно из перечисленного нарисовано и цвет этого рисунка.
    Работа на уровни пакетного режима не подходит, хочу сделать визуальное определения через снятия скриншота той области и определения рисунка по пикселям.

    В какую сторону копать... я совсем новичек в asm
     
  2. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    а Вам обязательно на assembler'e надо?
    Вам в сторону распознавания символов копать...
     
  3. Ganzzter

    Ganzzter New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2011
    Сообщения:
    10
    мне не суть важно решить задачу, просто хочу совместить приятное с полезным, так как полным ходом изучаю Аsm и подвернулась интересная идея, вот и решил cделать свое изучения ещё более увлекательным
    да понимаю что на других языках это решается гораздо проще, но мне интересно на Asm

    Возможно кто то что нибудь подобное реализовывал интересно почитать, может есть какие нибудь lib ??
     
  4. noonv

    noonv Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    209
    Адрес:
    Russia
  5. Ganzzter

    Ganzzter New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2011
    Сообщения:
    10
    Да мне интересно конечно, но не настолько чтоб покупать плату:)
     
  6. noonv

    noonv Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    209
    Адрес:
    Russia
    OpenCV работает на ПК :))))
     
  7. Ganzzter

    Ganzzter New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2011
    Сообщения:
    10
    :) что то я поторопился прочитал плата и решил что это плата какая-то нужна и сразу закрыл :)
    Спасибо буду смотреть
     
  8. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    На эту тему можно целую книгу написать.
    Можно оспорить многие положения OpenCV.
    Как вариант вполне имеет право на существование.
    Если не пихать понятия из высшей математики, а использовать предельные разумные приближения вполне можно реализовать нересурсоёмкие приложения работающие с десятком мегабайт памяти и 100 MHz процессором, то есть даже на сотовых телефонах;
    а на современных ПК в режиме реального времени с несколькими камерами.

    1. Совет всё-таки попробовать написать программу именно на ассемблере.
    2. Так как вы используете математические фигуры, она вам пригодится в рамках школьного курса. Стоит только вспомнить, что Окружность — геометрическое место точек, равноудаленных от центральной точки. И у вас всё получится.
     
  9. Ganzzter

    Ganzzter New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2011
    Сообщения:
    10
    я и так хочу писать именно на Asm вот только мне бы по больше примеров и статей как работать с пикселями различать цвета и т.д... Подкиньте какие нибудь материалы или идеи как подобное реализовать на Assembler буду благодарен google пока не дает результатов...

    не может же быть что это OpenCV единственное решение.

    У меня до этого был опыт только со скриптовыми языками Perl, php по этому я в WinApi слаб
     
  10. noonv

    noonv Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    209
    Адрес:
    Russia
    не буду спорить, но, например, OpenCV можно использовать для проверки и отработки идеи, а потом уж если не устраивает быстродействие (которое, очень хорошее :) можете переписать свой алгоритм на асме :)
    а так - алгоритм поиска должен быть таким:
    1. выделение контруров с помощью Кенни
    2. поиск по контурам (или аналитически, как и советовал paralvic) или, например, с помощью преобразования Хафа
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Ganzzter
    Можно придумать кучу вариантов распознавания.
    Вот и пиши как думаешь. Начни с простого к примеру повышения яркости изображения. Затем преобразование цветной картинки в оттенки серого. Затем по сложнее сделай фильтр выделения границ Собеля.

    Есть GpuCv. Все алгоритмы можно найти по отдельности в google.
    На java лучше всего ищется, просто добавляешь это слово при поиске.

    Еще можешь посмотреть библиотеку graphics32. Там половина на ассемблере написано.

    Сам лично пишу на Delphi аналог OpenCV.
     
  12. Ganzzter

    Ganzzter New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2011
    Сообщения:
    10
    Спасибо что откликнулись
    ну вот я думаю так снимаем скриншот, преобразуем в png формат избавляясь тем самым от оттенков и начиная с самого верхнего пикселя начинаем узнавать цвет каждого пикселя к примеру фон белый, двигаемся на искасок по каждому пикселю вниз проверяя цвет пока не натыкаемся на другой цвет и так с разных сторон картинки .
    вот что меня интересует как узнать цвет пикселя картинки с помощью asm ищу но нечего найти немогу??
     
  13. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Ganzzter
    png не подходит так как это сжатый формат. Надо работать DIB он же BitMap.

    Чтобы получить набор пикселей используй GetDIBits.
    Или же создай битмэп с примым доступом CreateDIBSection и копируй в него свои данные.
     
  14. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Не находишь потому что за это отвечает не ассемблер- набор команд ассемблера, а API - интерфейс для программирования приложений. В нашем случае API виндоуса или сторонней библиотеки.
     
  15. Ganzzter

    Ganzzter New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2011
    Сообщения:
    10
    Ясненько я привык к тому что у скриптовых языков Perl там на все есть свои модули, а у ASM нет видимо не каких специальных модулей, нужно просто ковырять библиотеки WinApi понял спасибо
     
  16. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    Ganzzter, скачай шестнадцатеричный редактор
    http://www.wasm.ru/baixado.php?mode=tool&id=24

    открой какой-нибудь небольшой BMP файл и попробуй поменять содержимое блоков, попереставлять его части. Любое решение будет делать то же самое.
     
  17. Ganzzter

    Ganzzter New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2011
    Сообщения:
    10
    извеняюсь немного не понял что это мне даст, ведь это получется билиберда как это мне поможет? ведь я незнаю что изменять картинка просто портится и все
     
  18. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Что бы знать, что менять надо изучить структуру файла .bmp. Изучив вы поймете, что кодирование изображения зависит от многих факторов, например наличие компрессии, палитры, глубины цвета и т.д. Вся эта информация содержится в заголовке файла. А и если вы не сильны в API, то изучив и поняв то, о чем я написал выше вы сами с легкостью(конечно если вы знаете асм) напишете функцию определения цвета пикселя. В асме есть все, только для этого нужна ваша фантазия!
     
  19. bomz

    bomz New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2011
    Сообщения:
    26
    для распознования картинок есть много программ - ABBY FineReader например (если быть точнее распознование текстов). на элементарном уровне проблема распознования картинок подымается USD http://www.dimonius.ru/?usd качалка которая каптчи распознает для ввода кодов. одна из сборок - USD от GYRA кажется так, использует для распознования стороннюю программку с командной строкой - CAP. на сайте этой программки есть инструкция как готовить шаблоны и такое прочее. почитай и с алгоритмом у тебя случится просветление. задача сама по себе не такая уж и сложная, как кажется, она решается простыи алгоритмами - естественно надежность рапознования не высокая, но у тебя стандарт картинок жесткий - так что просто будет.

    структура BMP файла простейшая - описана в инете неоднократно уже сто лет, даже для турбо бейсика есть подробное описание как нарисовать картинку на экране используя бмп шаблон. для упрощения задачи сборка GYRA+CAP использует сторонню программку с командной строкой которая конвертирует картинки разных форматов в формат который понимает CAP. уже не помню какую
     
  20. bomz

    bomz New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2011
    Сообщения:
    26
    крест на крест под 90 градусов две линии проведи (просканируй) каждая пересечется с фигурой два раза (точки НЕ ТОГО цвета). треугольник определился. и так далее....