Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчет пятен, Как посчитать пятна??? 
:(
    Опции темы
Mephisto
  Дата 4.9.2003, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



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

PM   Вверх
cardinal
Дата 4.9.2003, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Если под пятнами ты подразумеваешь темные места на картинке, то предется выдумывать какой нибудь хитрый алгоритм (врятли ты готовый найдешь, я вещи и по стандартней не мог найти bored.gif). Мысля по этому поводу есть, а вот писать и тестировать предется тебе smile.gif.

Во первых есть два метода определить яркость цвета:
- яркость определяется по формуле:
(max + min) / 2,
при этом max и min это максимальное и минимальное значения из твоего RGB цвета. Что-то не получилось лучше сформулировать smile.gif . Объясняю на примере. Вот сидит у тебя pixel в bmp, ты смотришь какой у него цвет и получаешь (255, 255, 255), то есть белый. Максимальное значение - это 255 и минимальное тоже, поделили на два и получили 255, то есть ярче не будет. Ну и так далее. С красным (из стандартной palette) ты получишь яркость 127, то бишь среднюю яркость.
- А второй метод это определение яркости по формуле, которая определяет яркость наиболее близкою к яркости, которую воспринимаем мы. Вот формула:
Яркость = R * 0,3 + G * 0,59 + B * 0,11
Красный у тебя будет потемнее в два раза по этой формуле, а белый как был так и останется самым ярким (+/- погрешность если будешь работать без плавующей точки).

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

-----------------------------------------------------
----11111------------------------------------------
-------111111------------------2222222---------
------11111111---------------------2222222----
----------1111111------------------22222222---
--------------------------------------------222222
-------------------------------------22222222222
----333333333------------------------------------
---------333333333-------------------------------
---------3333333333333-------------------------

Ну и соответственно самая большая цифра второго буфера это и есть количество пятен на твоем рисунке.

Успехов!



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Black_Star
Дата 9.9.2003, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 9.9.2003
Где: Minsk

Репутация: 4
Всего: 4



Я что-то не понял насчет определения яркости sad.gif...
Цитата
Вот сидит у тебя pixel в bmp, ты смотришь какой у него цвет и получаешь (255, 255, 255), то есть белый. Максимальное значение - это 255 и минимальное тоже

255 - максимум, верю.
Но 255 - минимум???
Найдем мы, например, число 100... получается (100+255)/2=177.5 ?
хм... это еще куда не шло... а найдем 1! 1 - это почти ничто, а получим в итоге 128! Это будет резко отличаться от действительности...

Предлагаю такой вариант, но он слишком долгий...
Просматриваем всю картинку...
A1=Point(x,y)
A2=Point(x+1,y)
A3=Point(x-1,y)
...
...
A9=Point(x+1,y+1)
Далее хитрым уравнением находим среднее значение всех цветов, это и будет цвет в точке х,у.

PM ICQ   Вверх
cardinal
Дата 10.9.2003, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата
Я что-то не понял насчет определения яркости ...

Полностью согласен smile.gif.

Цитата
Найдем мы, например, число 100... получается (100+255)/2=177.5 ?
хм... это еще куда не шло... а найдем 1! 1 - это почти ничто, а получим в итоге 128! Это будет резко отличаться от действительности...

Дело в том, что число 100 или 1 мы не найдем smile.gif, потому что какждый pixel описывают три параметра. Для того, чтобы понять о чем здесь речь, предлагаю зайти в обыкновенный paint (paint->палитра->изменить палитру) и побаловаться с красками в палитре. Там ты увидишь разные значение красного, зеленого и синиго каналов, и яркость цвета. Так вот (min = "канал с наименьшим значением" + max = "канал с наибольшим значением") / 2 = яркость.

Цитата
255 - максимум, верю.
Но 255 - минимумconfused.gif

У белого цвета значения всех каналов равны, соответственно равны и значения min и маx.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Black_Star
Дата 10.9.2003, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 9.9.2003
Где: Minsk

Репутация: 4
Всего: 4



Цитата
Дело в том, что число 100 или 1 мы не найдем , потому что какждый pixel описывают три параметра


smile.gif Как верно замечено, пиксел описывают 3 параметра. Енто и есть система RGB(красный, зеленый, синий). Они и представляют собою число типа Long, кот. хранятся в структуре BitMap. Насчет яркости там НИЧЕГО не сказано smile.gif

Цитата
Так вот (min = "канал с наименьшим значением" + max = "канал с наибольшим значением") / 2 = яркость.

(max + min) / 2
Максимальное значение - это 255 и минимальное тоже, поделили на два и получили 255


Вопрос. Почему яркость не бывает больше 240??? smile.gif

Цитата
Для того, чтобы понять о чем здесь речь, предлагаю зайти в обыкновенный paint (paint->палитра->изменить палитру) и побаловаться с красками в палитре


Предлагаю тоже smile.gif Яркость, как таковая никакой роли не играет, при изменении яркости меняется и сам цвет (см. на RGB) smile.gif


PM ICQ   Вверх
cardinal
Дата 11.9.2003, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата
Вопрос. Почему яркость не бывает больше 240???

Ответ. А кто сказал, что paint так же яркость высчитывает, как я это предложил. Они сказали, что самое яркое значение - это 240, вот и все.

Цитата
Яркость, как таковая никакой роли не играет, при изменении яркости меняется и сам цвет (см. на RGB)

Ну а тут мы уже от темы отклоняемся smile.gif . Человек хочет пятна считать, соответственно яркость цвета тут играет роль.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Black_Star
Дата 11.9.2003, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 9.9.2003
Где: Minsk

Репутация: 4
Всего: 4



Да, но понятие яркости такое размытое...
Яркость - не что иное, как сам цвет. Просто надо высчитывать значение соотв. цвета (0-255). И ничего делить не надо smile.gif
Возьми просто красный RGB(255,0,0)
но он может быть и RGB(100,0,0) просто кажется, что тускнее...
Но это изменение не яркости, а самого цвета!
А потому вычислить его яркость или неяркость нереально...
В моем 1м примере я предлагал сравнивать текущую точку с окружающими... Мотом брать "среднее". Но это будет типа метода Blur.
А для бооольших пятен надо ваще нечто выдумывать.... confused.gif
А то, что менять яркость.... приведет к ZOrder картинки smile.gif

PM ICQ   Вверх
cardinal
Дата 12.9.2003, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата
Да, но понятие яркости такое размытое...

Ничего тут размытого нет! Как же dithering работает, если яркость - это размытое понятие?
Цитата
Просто надо высчитывать значение соотв. цвета (0-255). И ничего делить не надо.

Ну тогда напиши, как ты хочешь высчитывать это значение соотв. цвета (0-255). smile.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Black_Star
Дата 12.9.2003, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 9.9.2003
Где: Minsk

Репутация: 4
Всего: 4



Цитата
Ну тогда напиши, как ты хочешь высчитывать это значение соотв. цвета (0-255).

А что там сложного?
RGB=&h980000 ,т.е. красный равен 155...
надо умеличить его "яркость" ставь. например 200... И что, сложно?
Но это не яркость! Это изменение самого цвета!!!
PM ICQ   Вверх
cardinal
Дата 12.9.2003, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата
Но это изменение не яркости, а самого цвета!
А потому вычислить его яркость или неяркость нереально...

Я же вычисляю а ты говоришь нереально smile.gif.
Ладно, переходим к практике.
Вот есть у тебя на картинке круг цвета RGB(236,102,79), внутри него есть еще один круг меньшего диаметра - его цвет RGB(207,50,22), внутри него есть еще один круг (тоже меньшего диаметра) цвета RGB(146,35,16).
Так вот круг в самом центре очень темный, соответсвенно это и есть пятно. Используя метод (min+max)/2, получаем для трех кругов такие значения: 157, 114, 81. Соответсвенно мы можем сказать, что все что темнее 100 (<100) - это пятна. А теперь твоя очередь, Black_Star потому, что я так и не въехал, что ты предлагаешь делать. Вот еще раз то, что ты написал:
Цитата
А что там сложного?
RGB=&h980000 ,т.е. красный равен 155...
надо умеличить его "яркость" ставь. например 200... И что, сложно?





--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
-Mikle-
Дата 13.9.2003, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Black_Star, cardinal абсолютно прав. Естественно для реального значения цвета разные RGB, но задача в том, чтобы определить темнее-светлее. Если рассматривать просто составляющие RGB, то ты не сможешь определить насколько один цвет темнее-светлее другого. Поэтому нужна формула, которая взяв три составляющие, вернула одно число. Наиболее верный результат яркости будет по известной всем формуле: Яркость = R * 0,3 + G * 0,59 + B * 0,11, упомянутой cardinal'ом, так как даст разный результат для значений: RGB(0,0,255) и RGB(0,255,0).
cardinal, + за терпеливость smile.gif


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
-Mikle-
Дата 13.9.2003, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Ну вот... воткнули проверку... теперь тебе нет плюса за терпеливость, простите, еще 440 сообщений надо, чтоб я мог человеку репутацию поднять... smile.gif.
Admin, не многовато-ли 500? Может хотя-бы 100 сделаешь? Если чел ответил 100 раз, значит он уже не просто "прохожий" на форуме... Ну да ладно, решать тебе... smile.gif


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Black_Star
Дата 14.9.2003, 04:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 9.9.2003
Где: Minsk

Репутация: 4
Всего: 4



Темнее/светлее понятно... 3 составляющие никто рассматривать не собирался smile.gif)))
sad.gif(( Народ! Вы хоть понимаете за что я борюсьconfused.gifconfused.gif
Нет такого в действительности - ЯРКОСТИ !!!
Нету... и не будет... это просто цвет... у пущай он хоть триганом. фо-ми высчитывается, всеравно это не яркость, а цвет... просто светлее... Вай...
Не интересно с вами спорить - уперлись! smile.gif
Ладно, каждый остался при своих интересах smile.gifsmile.gifsmile.gif...
PM ICQ   Вверх
cardinal
Дата 14.9.2003, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата
...это просто цвет..

Хорошо, взяли красный RGB(255,0,0). Посчитали то, что ты называешь цветом
Цитата
просто светлее
по формуле (min + max)/2 и получили (255 + 0)/2 = 127. А теперь вопрос: какой это цвет?
Конечно уперлись smile.gif , но хочется же знать что ты нам сказать то хочешь smile.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Black_Star
Дата 14.9.2003, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 9.9.2003
Где: Minsk

Репутация: 4
Всего: 4



127,0,0 - красный. Однозначно smile.gif
0,127,0 - зеленый... и т.д.
PM ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0824 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.