Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 10, 2011 20:57:58

Kostik
От:
Зарегистрирован: 2011-04-10
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

анализ частей изображения

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



Офлайн

#2 Апрель 10, 2011 21:12:25

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

анализ частей изображения

А вы хотите интерактивно линеечку приставить (как в maps.google) или автоматический алгоритм составить?
не совсем в тему но:
Начиная с wolfram mathematica 7.0 - есть по правой кнопке get coordinates
Начиная с wolfram mathematica 8.0 Есть Morphological Image Processing » позволяет автоматом параметры определять.
Для питона:
http://www.mmorph.com/pymorph/
Но я не пробовал этого зверя.
На первый взгляд они близки. Но в математике сканы сложно обрабатывать - великоваты изображения.



Отредактировано (Апрель 10, 2011 21:13:19)

Офлайн

#3 Апрель 10, 2011 21:25:23

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

анализ частей изображения

ониж у вас на белом фоне?
гимп умеет усердно кадрировать и скриптоваться на питоне



Офлайн

#4 Апрель 12, 2011 09:33:34

RUVATA
От:
Зарегистрирован: 2011-04-08
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

анализ частей изображения

А цвет заведомо известен ?



Офлайн

#5 Апрель 12, 2011 20:40:29

Kostik
От:
Зарегистрирован: 2011-04-10
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

анализ частей изображения

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

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


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

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



Офлайн

#6 Апрель 13, 2011 05:27:36

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

анализ частей изображения

Ну по такому скану и линейкой фиг замеришь :) А нужны размеры корпуса или лапы тоже?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Апрель 13, 2011 10:15:24

RUVATA
От:
Зарегистрирован: 2011-04-08
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

анализ частей изображения

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: Применимо к твоей ситуации, использую такую логику можно получить результат с погрешностью, так как будет захватываться теневой контур…
Погрешность можно просчитать, а можно отсечь с помощью того-же цветового маркера…
Есть еще проблема с белыми вкраплениями, её тоже надо обдумать…
Вообщем… не так всё просто как кажется…



Отредактировано (Апрель 13, 2011 11:53:27)

Офлайн

#8 Апрель 13, 2011 20:44:50

Kostik
От:
Зарегистрирован: 2011-04-10
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

анализ частей изображения

скан плохой, да. но можно гораздо лучше, даже без теней (почти).
самое главное надкрылья, переднегрудь. насчет ног надо думать.
я вот думал, что возможно есть способ перебирать не все точки, а использовать некие “массивы”, то есть отыскивать сначала места большей плотности темных точек, определять длину и ширину.
к сожалению с С++ знаком поверхностно, с изображениями раньше не работал и не знаю с какой стороны взяться.



Офлайн

#9 Апрель 13, 2011 21:16:52

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

анализ частей изображения

Посмотрите всетаки http://www.mmorph.com/pymorph/ там почти наверняка есть то что вам нужно.



Офлайн

#10 Апрель 14, 2011 05:36:08

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

анализ частей изображения

doza_and
Посмотрите всетаки http://www.mmorph.com/pymorph/ там почти наверняка есть то что вам нужно.
+1
как минимум выделение контура стоит сделать



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version