Добрый день, подскажите пожалуйста по какому алгоритму возможно подсчитать пиксели изображения внутри контура. У меня есть функция, которая находит первый, самый верхний пиксель. Есть функция обхода пикселей вокруг найденного пикселя для обнаружения следующего, его обесцвечивания и подсчета. То есть для обхода контура. А вот, как подсчитать пиксели внутри контура, никак не могу сообразить. Вот архив с моей программой:
Вопрос.zip
Спасибо!
Подсчет пикселей внутри замкнутого контура на изображении
Модератор: Admin
Ответ
Oleg34 писал(а):Добрый день, подскажите пожалуйста по какому алгоритму возможно подсчитать пиксели изображения внутри контура. У меня есть функция, которая находит первый, самый верхний пиксель. Есть функция обхода пикселей вокруг найденного пикселя для обнаружения следующего, его обесцвечивания и подсчета. То есть для обхода контура. А вот, как подсчитать пиксели внутри контура, никак не могу сообразить. Вот архив с моей программой:
Вопрос.zip
Спасибо!
Поместите свой вопрос здесь
http://communities.ptc.com/community/mathcad
и Вам быстро ответят.
Re: Подсчет пикселей внутри замкнутого контура на изображени
Oleg34 писал(а):...как подсчитать пиксели внутри контура, никак не могу сообразить.
Oleg34, если есть возможность "залить" контур любым цветом, а потом считать эту картинку в Mathcad, то Ваша задача очень сильно упростится...

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

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

Re: Ответ
Поместите свой вопрос здесь
http://communities.ptc.com/community/mathcad
и Вам быстро ответят.[/quote]
Спасибо Вам за совет! Я попробую и там спросить!
http://communities.ptc.com/community/mathcad
и Вам быстро ответят.[/quote]
Спасибо Вам за совет! Я попробую и там спросить!
Re: Ответ
...то Ваша задача очень сильно упростится
Алгоритм - это здорово. Но если Вы можете "залить" свой замкнутый контур любым цветом (Paint...), то:
- считав свой рисунок в Mathcad (так, как это реализовано у Вас в документе), Вы получите матрицу MxN пикселей (чисел), равных 255=белый цвет, 0=черный и ЧИСЛО=цвет, которым Вы залили область. Остается только перебрать все пиксели рисунка (от [0,0] до [M,N]) и подсчитать, сколько элементов массива (читай пикселей)равны ЧИСЛУ цвета, которым Вы заливали свою область. Все.
Можно при этом вычислить и площадь залитой области...
Re: Ответ
VSI писал(а):Но если Вы можете "залить" свой замкнутый контур любым цветом (Paint...)
Извиняюсь, что не ответил сразу. Работал.
Спасибо за ответ! Дело в том, что мне нужно программно это посчитать. Я уже догадался как. При проходе по ряду в цикле, если есть внутренний контур, то обязательно будет вхождение в контур и выход из него. То есть должны быть пары окрашенных пикселей между которыми считаются неокрашенные. С одним исключением, когда идут подряд два окрашенных пикселя.В принципе осталось осуществить это в Mathcad

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

Re: Ответ
VSI писал(а):...Если Вы пришлете свою картинку с закрашенной областью, то мы сможем СРАВНИТЬ свои результаты расчета. Вы проведете расчет по своему алгоритму, я - по своему. Согласны?
Да, конечно. Вот архив:Площадь контура.zip получилось достаточно замороченно, но вроде считает.Вычисление площади в пункте №3.
Re: Ответ
Oleg34 писал(а):Да, конечно. Вот архив:Площадь контура.zip получилось достаточно замороченно, но вроде считает.
Oleg34, мой антивирус очень нехорошо РУГАЕТСЯ в адрес Вашего файлообменника...
Пожалуйста, попробуйте отправить сюда http://www.uafile.com.ua/
Re: Ответ
VSI писал(а):Oleg34 писал(а):Да, конечно. Вот архив:Площадь контура.zip получилось достаточно замороченно, но вроде считает.
Oleg34, мой антивирус очень нехорошо РУГАЕТСЯ в адрес Вашего файлообменника...
Пожалуйста, попробуйте отправить сюда http://www.uafile.com.ua/
Вот, перезагрузил : Площадь контура.zip на uafile.com.ua
Re: Ответ
Oleg34, на Вашей картинке matr_04 кол-во пикселей во внешнем контуре (эллипс) равно 882 штуки (у Вас 883)
Я закрасил этот контур синим цветом и подсчитал, сколько пикселей СИНЕГО ЦВЕТА (29) в матрице matr_04...

Я закрасил этот контур синим цветом и подсчитал, сколько пикселей СИНЕГО ЦВЕТА (29) в матрице matr_04...
Re: Ответ
VSI писал(а):Oleg34, на Вашей картинке matr_04 кол-во пикселей во внешнем контуре (эллипс) равно 882 штуки (у Вас 883)![]()
Я закрасил этот контур синим цветом и подсчитал, сколько пикселей СИНЕГО ЦВЕТА (29) в матрице matr_04...
Здравствуйте! Извиняюсь, что не смог ответить сразу. У меня не стоит вопрос по количеству пикселей во внешнем контуре (Буду благодарен если укажите на мою ошибку в программе). У меня проблема с подсчетом пикселей, заключенных внутри этого контура. Для проверки самого себя я закрашивал каждый подсчитанный пиксель.
То есть в принципе делал именно, как предлагали Вы. Поскольку использую пакет Mathcad не регулярно моего опыта работы в нем хватило только на отдельные куски (то есть я отдельно перекрасил внешний контур, потом изменил цвет внутреннего и получил наружный контур, ну и т.д.). Получилось довольно замороченно. Вот если бы Вы посмотрели именно этот раздел 3.Определение площади между двух контуров и указали бы мне на ошибки или дали бы рекомендации, как сделать проще, то был бы Вам признателен! В любом случае огромное спасибо за Ваши ответы!VSI писал(а): Вы говорили, что Но если Вы можете "залить" свой замкнутый контур любым цветом (Paint...), то:...
Re: Ответ
Держите... Надеюсь, что в этот раз я правильно понял Вашу задачу...
Извините за задержку с ответом...

Извините за задержку с ответом...
