На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Определение количества фрагментов на изображении
Мне нужно подсчитать количество фрагментов на изображении. Приложение должно быть десктопное, без использования интернета. Шаблон фрагмента - это элемент изображения, полученный из этого же изображения путем выделения нужного фрагмента и его сохранения. Фрагменты на изображении не перекрываются. В интернете много информации по обработке изображений с помощью ИИ, а есть более простые способы решения этой задачи? К сожалению, раньше обработкой изображений не занимался. Пока научился на C# загружать изображения, перемещаться по пикселам. Помогите, пожалуйста, ссылками на учебники и ресурсы, которые помогли бы мне решить эту задачу.
Цитата tumanovalex @
Фрагменты на изображении не перекрываются.

А какой был фон ДО нанесения на него фрагментов? Тут три варианта:
№1. Однотонный фон. Тогда достаточно посчитать отдельные фрагменты, контрастные с фоном, ведь "Фрагменты на изображении не перекрываются".
№2. Фон - заранее известная картинка. Тогда достаточно вычесть из результата эту картинку, и получим №1.
№3. Фон случайный и заранее неизвестен - тогда задача нерешаема, ведь фон заранее может содержать участки, похожие на искомое изображение.
Я плохо рассказал о задаче. Фона, на который накладываются картинки, нет. Есть просто картинка (jpg), на которой есть одинаковые элементы. Эти элементы повторяются по горизонтали (несколько рядов элементов на изображении), между ними есть небольшие расстояния по вертикали и горизонтали (поэтому и указал, что они не пересекаются). В качестве шаблона для подсчета можно в графическом редакторе вырезать один из элементов на изображении, сохранить и использовать его для подсчета. В качестве примера прикрепил картинку типа "шахматная доска", на которой нужно определить, например, количество черных квадратов, белых квадратов, пар "белый и черный квадрат". Изображение может быть цветным или черно-белым. На реальной картинке элементы более сложные.Я где-то читал, что нужно вычислить корреляционную функцию между изображением и его шаблоном. Если эта функция имеет наибольшее значение, то значит участок изображения очень похож на шаблон. Как я понимаю, нужно по изображению "перемещать" шаблон и вычислять корреляционную функцию между участком изображения и шаблона. Вот только не помню, как нужно было вычислять эту функцию. Есть, наверное, и другие способы.
Прикреплённая картинка
Прикреплённая картинка
Цитата tumanovalex @
Фона, на который накладываются картинки, нет. Есть просто картинка (jpg), на которой есть одинаковые элементы.

А между этими элементами что? Фона не может не быть, JPG - это прямоугольное изображение, если между фрагментами есть расстояние, значит есть пиксели с каким-то содержимым. Вопрос - с каким. Ответ "с каким угодно" не годится, ведь может оказаться рисунок, в точности соответствующий исходному фрагменту, тогда мы его не отличим.
Так что, если нужно решение - нужна более строгая формулировка условия задачи.
А если нужно определение корреляционной функции, так его нет в общем виде - мы сами определяем условия соответствия одного изображения другому.
M
Тема отображена в разделе(ах): Алгоритмы
Сообщение на автоудалении
Цитата tumanovalex @
В интернете много информации по обработке изображений с помощью ИИ, а есть более простые способы решения этой задачи? К сожалению, раньше обработкой изображений не занимался

Заплатят больше за решение с помощью ИИ.
Посмотрите на странице https://ru.stackoverflow.com/questions/8123...и/812762#812762, там есть пример и обсуждение темы поиска по шаблону
Спасибо за ссылку. Обязательно посмотрю. По ссылке https://docs.opencv.org/4.x/d4/dc6/tutorial...e_matching.html есть пример Template Matching with Multiple Objects на Питоне:
ExpandedWrap disabled
    import cv2 as cv
    import numpy as np
    from matplotlib import pyplot as plt
    img_rgb = cv.imread('mario.png')
    img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
    template = cv.imread('mario_coin.png',0)
    w, h = template.shape[::-1] // Получение формы изображения-шаблона и определение размеров формы шаблона по горизонтали и вертикали?
    res = cv.matchTemplate(img_gray,template,cv.TM_CCOEFF_NORMED) // получение результата сравнения с шаблоном-одно изображение?
    threshold = 0.8
    loc = np.where( res >= threshold) // сравнение с порогом
    for pt in zip(*loc[::-1])// откуда появляется массив?
        cv.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2) // выделение красным каждого найденного объекта?
    cv.imwrite('res.png',img_rgb)
К сожалению, с Питоном не знаком. Хотел бы перевести код на С++. По функциям OpenCV вопросов нет. Непонятные мне вещи указал в комментариях к коду. Может быть кто-нибудь поможет перевести код на С++?
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script execution time: 0,0308 ]   [ 23 queries used ]   [ Generated: 7.12.21, 15:41 GMT ]