Найти - Пользователи
Полная версия: анализ частей изображения
Начало » Python для новичков » анализ частей изображения
1
Kostik
Возникла необходимость производить измерения по изображениям полученным с помощью сканера. Коллекции насекомых приклеены на бумагу и весьма удобно сканируются. Но ручное определение размеров довольно трудоемко и хочется автоматизироваться.
В связи с чем возник вопрос о наличии каких-либо модулей, которые можно использовать для определения размеров на изображении. Возможно есть готовые решения, но я пока таких не нашел. Прошу помочь если кто-то что-то знает.
doza_and
А вы хотите интерактивно линеечку приставить (как в maps.google) или автоматический алгоритм составить?
не совсем в тему но:
Начиная с wolfram mathematica 7.0 - есть по правой кнопке get coordinates
Начиная с wolfram mathematica 8.0 Есть Morphological Image Processing » позволяет автоматом параметры определять.
Для питона:
http://www.mmorph.com/pymorph/
Но я не пробовал этого зверя.
На первый взгляд они близки. Но в математике сканы сложно обрабатывать - великоваты изображения.
Zubchick
ониж у вас на белом фоне?
гимп умеет усердно кадрировать и скриптоваться на питоне
RUVATA
А цвет заведомо известен ?
Kostik
ну проясню.
фон ,конечно, белый.
Цвет скорее всего черный или в оттенках серого, поскольку для измерений цвет не нужен.
возможны тени, поскольку объекты объемные.

Вот вариант сканированного жука, правда он не приклеенный, поэтому кривовато. Но измеряемые будут прямо вертикально.


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

фактически нужна автоматически работающая программа, которая будет вписывать в какой-то файл номера жуков и получившиеся значения измерений.
PooH
Ну по такому скану и линейкой фиг замеришь :) А нужны размеры корпуса или лапы тоже?
RUVATA
Kostik
Цвет скорее всего черный или в оттенках серого, поскольку для измерений цвет не нужен.
Прям таки и не нужен… ^__^ я “питонер” хилый но с C++ и Native C поработал солидно и с изображениями в т.ч.

Основной принцип измерения изображений, это присвоение пикселю изображения обусловленного рамера в натуральных еденицах измерения…
Здесь все зависит от dpi… но можно абстрагироваться пока и обусловиться что 1 пиксель - 1 мм

Потом посекторное чтение цветовых маркеров пикселей в определенной последовательности, например (на белом фоне черный квадрат ; весь холст 4x4 пикселей, а квадрат на нем 2x2 пикселей)
Действовать будем вот по такой логике:

1) Перебираем пиксели целевого изображения слева на право/сзнизу вверх (представь плоскости x -|- y, т.е. с минимального y по x),
Объявляем двухмерный массив (в Python нет массивов :) работать придется со списком)
н/п “square()” ; первая размерность массива - количество пикселей в холсте по высоте ; вторая размерность - 2 ;

Начинаем чтение анализ пикселей с самого верхнего левого пикселя - шаг один пиксель построчно ;
пока цвет белый - идем дальше, если черный то =>
сохраняем кординаты пикселя по x в во вторую размерность текущего элемента массива в индекс 0, (это еще называют “касание”).
PS:по у мы идем т.е. y у нас индекс первой размерности
далее перебераем пиксели пока они черные, как только появляется белый, то =>
сохраням координаты предыдущего пикселя по х во вторую размерность текущего элемента массива в индекс 1…
и т.д.

На выходе ты заимеешь вот такой массив
square{0}
–square(0,0) = nothing
–square(0,1) = nothing
square{1}
–square(1,0) = 2
–square(1,1) = 3
square{2}
–square(2,0) = 2
–square(2,1) = 3
square{2}
–square(3,0) = nothing
–square(3,1) = nothing
А уже из этого сам понимаешь что мы имеем… т.е если мы взяли за 1 пиксель - 1 мм
мы получилы изображение с шириной 2 пикселя и высотой 2 иными словами 2x2 мм

Хотя на практике используют очень извращенные алгоритмы, как правило так называемые “лавины”

PS: Применимо к твоей ситуации, использую такую логику можно получить результат с погрешностью, так как будет захватываться теневой контур…
Погрешность можно просчитать, а можно отсечь с помощью того-же цветового маркера…
Есть еще проблема с белыми вкраплениями, её тоже надо обдумать…
Вообщем… не так всё просто как кажется…
Kostik
скан плохой, да. но можно гораздо лучше, даже без теней (почти).
самое главное надкрылья, переднегрудь. насчет ног надо думать.
я вот думал, что возможно есть способ перебирать не все точки, а использовать некие “массивы”, то есть отыскивать сначала места большей плотности темных точек, определять длину и ширину.
к сожалению с С++ знаком поверхностно, с изображениями раньше не работал и не знаю с какой стороны взяться.
doza_and
Посмотрите всетаки http://www.mmorph.com/pymorph/ там почти наверняка есть то что вам нужно.
PooH
doza_and
Посмотрите всетаки http://www.mmorph.com/pymorph/ там почти наверняка есть то что вам нужно.
+1
как минимум выделение контура стоит сделать
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB