Подсчет пикселей внутри замкнутого контура на изображении

Форум пользователей пакета Mathcad

Модератор: Admin

Oleg34
Сообщения: 52
Зарегистрирован: Вт ноя 16, 2010 4:52 pm

Подсчет пикселей внутри замкнутого контура на изображении

Сообщение Oleg34 » Пн окт 27, 2014 1:00 pm

Добрый день, подскажите пожалуйста по какому алгоритму возможно подсчитать пиксели изображения внутри контура. У меня есть функция, которая находит первый, самый верхний пиксель. Есть функция обхода пикселей вокруг найденного пикселя для обнаружения следующего, его обесцвечивания и подсчета. То есть для обхода контура. А вот, как подсчитать пиксели внутри контура, никак не могу сообразить. Вот архив с моей программой:
Вопрос.zip
Спасибо!

VFO
Сообщения: 4227
Зарегистрирован: Ср фев 27, 2002 8:03 pm

Ответ

Сообщение VFO » Пт окт 31, 2014 4:45 pm

Oleg34 писал(а):Добрый день, подскажите пожалуйста по какому алгоритму возможно подсчитать пиксели изображения внутри контура. У меня есть функция, которая находит первый, самый верхний пиксель. Есть функция обхода пикселей вокруг найденного пикселя для обнаружения следующего, его обесцвечивания и подсчета. То есть для обхода контура. А вот, как подсчитать пиксели внутри контура, никак не могу сообразить. Вот архив с моей программой:
Вопрос.zip
Спасибо!

Поместите свой вопрос здесь
http://communities.ptc.com/community/mathcad
и Вам быстро ответят.

VSI
Сообщения: 305
Зарегистрирован: Вт мар 15, 2005 6:40 pm
Откуда: Мариуполь

Re: Подсчет пикселей внутри замкнутого контура на изображени

Сообщение VSI » Пт окт 31, 2014 5:05 pm

Oleg34 писал(а):...как подсчитать пиксели внутри контура, никак не могу сообразить.

Oleg34, если есть возможность "залить" контур любым цветом, а потом считать эту картинку в Mathcad, то Ваша задача очень сильно упростится... :)

Oleg34
Сообщения: 52
Зарегистрирован: Вт ноя 16, 2010 4:52 pm

Re: Подсчет пикселей внутри замкнутого контура на изображени

Сообщение Oleg34 » Пт окт 31, 2014 7:00 pm

Oleg34, если есть возможность "залить" контур любым цветом, а потом считать эту картинку в Mathcad, то Ваша задача очень сильно упростится... :)[/quote]

Контур я заливаю любым цветом от 0 до 255. Сам алгоритм работает так:
1) Нахожу самую верхнюю точку ( первый пиксель) на изображении. Это функция first_point
2) Определяю все варианты смещения вокруг найденной точки начиная с ближайшей правой, обход вокруг найденной против часовой стрелки. Это множество mov_point
3) Задал функцию next_point для поиска следующей точки и ее перекрашивание в цвет 200 (то есть, то, что Вы предлагаете).
4) Задал функцию c_01m для обхода всего контура с окрашиванием уже всех точек контура в цвет 200 (то есть в цикле вызываю функцию next_point).
А вот если Вы предложите алгоритм подсчета пикселей внутри контура, буду Вам благодарен. В сети нашел только руководство Власова и Калмыкова "Алгоритм и программа распознавания контуров изображений, как последовательность отрезков цифровых прямых" Но там, что то такая жесть! Я реально не смогу осуществить это в Mathcad :(

Oleg34
Сообщения: 52
Зарегистрирован: Вт ноя 16, 2010 4:52 pm

Re: Ответ

Сообщение Oleg34 » Пт окт 31, 2014 7:02 pm

Поместите свой вопрос здесь
http://communities.ptc.com/community/mathcad
и Вам быстро ответят.[/quote]

Спасибо Вам за совет! Я попробую и там спросить!

VSI
Сообщения: 305
Зарегистрирован: Вт мар 15, 2005 6:40 pm
Откуда: Мариуполь

Re: Ответ

Сообщение VSI » Сб ноя 01, 2014 3:21 pm

...то Ваша задача очень сильно упростится

Алгоритм - это здорово. Но если Вы можете "залить" свой замкнутый контур любым цветом (Paint...), то:
- считав свой рисунок в Mathcad (так, как это реализовано у Вас в документе), Вы получите матрицу MxN пикселей (чисел), равных 255=белый цвет, 0=черный и ЧИСЛО=цвет, которым Вы залили область. Остается только перебрать все пиксели рисунка (от [0,0] до [M,N]) и подсчитать, сколько элементов массива (читай пикселей)равны ЧИСЛУ цвета, которым Вы заливали свою область. Все.
Можно при этом вычислить и площадь залитой области...

Oleg34
Сообщения: 52
Зарегистрирован: Вт ноя 16, 2010 4:52 pm

Re: Ответ

Сообщение Oleg34 » Пн ноя 03, 2014 11:13 am

VSI писал(а):
Но если Вы можете "залить" свой замкнутый контур любым цветом (Paint...)

Извиняюсь, что не ответил сразу. Работал.
Спасибо за ответ! Дело в том, что мне нужно программно это посчитать. Я уже догадался как. При проходе по ряду в цикле, если есть внутренний контур, то обязательно будет вхождение в контур и выход из него. То есть должны быть пары окрашенных пикселей между которыми считаются неокрашенные. С одним исключением, когда идут подряд два окрашенных пикселя.В принципе осталось осуществить это в Mathcad :)

VSI
Сообщения: 305
Зарегистрирован: Вт мар 15, 2005 6:40 pm
Откуда: Мариуполь

Re: Ответ

Сообщение VSI » Ср ноя 05, 2014 9:59 pm

Oleg34 писал(а):...Дело в том, что мне нужно программно это посчитать...

Oleg34, а я как Вам предлагаю это сделать?
Если Вы пришлете свою картинку с закрашенной областью, то мы сможем СРАВНИТЬ свои результаты расчета. Вы проведете расчет по своему алгоритму, я - по своему. Согласны? :wink:

uni
Сообщения: 1817
Зарегистрирован: Сб ноя 13, 2004 3:06 pm
Откуда: п.г.т. Излучинск
Контактная информация:

Сообщение uni » Чт ноя 06, 2014 8:10 pm

Обнулить все лишние точки, выбранному цвету сопоставить 1. Сложить все элементы каждого столбца изображения, потом сложить все результаты. Получите количество всех окрашенных точек.

Oleg34
Сообщения: 52
Зарегистрирован: Вт ноя 16, 2010 4:52 pm

Re: Ответ

Сообщение Oleg34 » Чт ноя 06, 2014 9:08 pm

VSI писал(а):...Если Вы пришлете свою картинку с закрашенной областью, то мы сможем СРАВНИТЬ свои результаты расчета. Вы проведете расчет по своему алгоритму, я - по своему. Согласны? :wink:

Да, конечно. Вот архив:Площадь контура.zip получилось достаточно замороченно, но вроде считает.Вычисление площади в пункте №3.

VSI
Сообщения: 305
Зарегистрирован: Вт мар 15, 2005 6:40 pm
Откуда: Мариуполь

Re: Ответ

Сообщение VSI » Чт ноя 06, 2014 9:32 pm

Oleg34 писал(а):Да, конечно. Вот архив:Площадь контура.zip получилось достаточно замороченно, но вроде считает.

Oleg34, мой антивирус очень нехорошо РУГАЕТСЯ в адрес Вашего файлообменника...
Пожалуйста, попробуйте отправить сюда http://www.uafile.com.ua/

Oleg34
Сообщения: 52
Зарегистрирован: Вт ноя 16, 2010 4:52 pm

Re: Ответ

Сообщение Oleg34 » Чт ноя 06, 2014 10:13 pm

VSI писал(а):
Oleg34 писал(а):Да, конечно. Вот архив:Площадь контура.zip получилось достаточно замороченно, но вроде считает.

Oleg34, мой антивирус очень нехорошо РУГАЕТСЯ в адрес Вашего файлообменника...
Пожалуйста, попробуйте отправить сюда http://www.uafile.com.ua/

Вот, перезагрузил : Площадь контура.zip на uafile.com.ua

VSI
Сообщения: 305
Зарегистрирован: Вт мар 15, 2005 6:40 pm
Откуда: Мариуполь

Re: Ответ

Сообщение VSI » Сб ноя 08, 2014 8:32 pm

Oleg34, на Вашей картинке matr_04 кол-во пикселей во внешнем контуре (эллипс) равно 882 штуки (у Вас 883) :D
Я закрасил этот контур синим цветом и подсчитал, сколько пикселей СИНЕГО ЦВЕТА (29) в матрице matr_04...

Oleg34
Сообщения: 52
Зарегистрирован: Вт ноя 16, 2010 4:52 pm

Re: Ответ

Сообщение Oleg34 » Вт ноя 11, 2014 10:28 am

VSI писал(а):Oleg34, на Вашей картинке matr_04 кол-во пикселей во внешнем контуре (эллипс) равно 882 штуки (у Вас 883) :D
Я закрасил этот контур синим цветом и подсчитал, сколько пикселей СИНЕГО ЦВЕТА (29) в матрице matr_04...

Здравствуйте! Извиняюсь, что не смог ответить сразу. У меня не стоит вопрос по количеству пикселей во внешнем контуре (Буду благодарен если укажите на мою ошибку в программе). У меня проблема с подсчетом пикселей, заключенных внутри этого контура. Для проверки самого себя я закрашивал каждый подсчитанный пиксель.
VSI писал(а): Вы говорили, что Но если Вы можете "залить" свой замкнутый контур любым цветом (Paint...), то:...
То есть в принципе делал именно, как предлагали Вы. Поскольку использую пакет Mathcad не регулярно моего опыта работы в нем хватило только на отдельные куски (то есть я отдельно перекрасил внешний контур, потом изменил цвет внутреннего и получил наружный контур, ну и т.д.). Получилось довольно замороченно. Вот если бы Вы посмотрели именно этот раздел 3.Определение площади между двух контуров и указали бы мне на ошибки или дали бы рекомендации, как сделать проще, то был бы Вам признателен! В любом случае огромное спасибо за Ваши ответы!

VSI
Сообщения: 305
Зарегистрирован: Вт мар 15, 2005 6:40 pm
Откуда: Мариуполь

Re: Ответ

Сообщение VSI » Чт ноя 13, 2014 9:39 pm

Держите... Надеюсь, что в этот раз я правильно понял Вашу задачу... :)
Извините за задержку с ответом... :wink: