Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Поиск бликов на изображении


Автор: zaksys 10.9.2010, 15:09
Здраствуйте. Перед мной встался задача находить блики на фотографиях, но пока не понял на чем можно можно построить алгоритм. Если у кого есть литература, либо примеры по работе с фотографиями. Пишите, очень нужна помощь. Пока мои результаты, не очень впечатляющие сделал только зарузку изображения в PictureBox, теперь вот надо его обрабатывать.

Автор: WolfAlone 10.9.2010, 15:11
Цитата(zaksys @  10.9.2010,  15:09 Найти цитируемый пост)
сделал только зарузку изображения в PictureBox
 - это самое сложное, остальное уже проще!  smile 
Ну а если серьёзно - если бы Вы могли предоставить образец того, что подразумевается под словом "блик" - возможно я бы смог Вам чем-нибудь помочь!

Автор: jonie 10.9.2010, 15:37
Думаю можно использовать анализ на основе преобразования Хафа ...

Автор: zaksys 17.9.2010, 18:14
Цитата(jonie @ 10.9.2010,  15:37)
Думаю можно использовать анализ на основе преобразования Хафа ...

А можно по подробнее про данный алгоритм пожалуйста. Если есть ссылка на электронный ресурс, поделитесь. Буду очень рад.

Добавлено @ 18:16
Цитата(WolfAlone @ 10.9.2010,  15:11)
Цитата(zaksys @  10.9.2010,  15:09 Найти цитируемый пост)
сделал только зарузку изображения в PictureBox
 - это самое сложное, остальное уже проще!  smile 
Ну а если серьёзно - если бы Вы могли предоставить образец того, что подразумевается под словом "блик" - возможно я бы смог Вам чем-нибудь помочь!

Вас интересует картинка, я так понимаю. Блик в моем понимании 
это отраженный свет от какого-либо источника, например солнца, либо лампы.
http://ipicture.ru/uploads/100917/7Wz3KFvT30.jpg
Для меня то загрузить изображение было тяжело. У меня все время C# ругался, на то что не мог найти путь к файлу. smile  smile 

Автор: Enter 20.9.2010, 16:38
сложная задачка.
на ум приходит приблизительно такой алгоритм.
1. берем фотку
2. определяем все области чисто белого цвета
3. определяем размер и форму этих областей
4. если размер соответствует и форма круглая, или приблизительно круглая (овал), то это блик.

самые проблематичные части это 2 и 3
можно их изменить так:
2. проходим по всем пикселям фотографии, и смотрим:
    если на расстоянии допустим в 10 пикселей по бокам и сверху-снизу все белое, то:
        берем ближайшие небелые пиксели сверху, снизу, по бокам и по диагонали, и смотрим расстояние до них.
            если оно приблизительно равно (разница в несколько пикселей), то это блик, иначе - к следующему пикселю

как-то так.
в принципе так мы будем находить любое белое пятно на фотке
но чтобы находить именно блики, необходимо усовершенствовать алгоритм.
например 
1. взять любое белое пятно
2. определить приблизительную яркость картинки вокруг пятна на расстоянии пикселей в 10 от его границ (взять рандомно 10-20 пикселей и поделить яркость). Она определяется как-то так:
Код
Bitmap bitmap = new Bitmap("C:\\путь к картинке.jpg");
bitmap.GetPixel(e.X, e.Y).GetBrightness();
3. взять еще 1 зону (10-20) пикселей от границ пятна, и тоже определить яркость.

зоны 2-3 должно хватить (яркость должна уменьшаться).

Автор: zaksys 20.9.2010, 20:09
Цитата(Enter @ 20.9.2010,  16:38)
сложная задачка.
на ум приходит приблизительно такой алгоритм.
1. берем фотку
2. определяем все области чисто белого цвета
3. определяем размер и форму этих областей
4. если размер соответствует и форма круглая, или приблизительно круглая (овал), то это блик.

самые проблематичные части это 2 и 3
можно их изменить так:
2. проходим по всем пикселям фотографии, и смотрим:
    если на расстоянии допустим в 10 пикселей по бокам и сверху-снизу все белое, то:
        берем ближайшие небелые пиксели сверху, снизу, по бокам и по диагонали, и смотрим расстояние до них.
            если оно приблизительно равно (разница в несколько пикселей), то это блик, иначе - к следующему пикселю

как-то так.
в принципе так мы будем находить любое белое пятно на фотке
но чтобы находить именно блики, необходимо усовершенствовать алгоритм.
например 
1. взять любое белое пятно
2. определить приблизительную яркость картинки вокруг пятна на расстоянии пикселей в 10 от его границ (взять рандомно 10-20 пикселей и поделить яркость). Она определяется как-то так:
Код
Bitmap bitmap = new Bitmap("C:\\путь к картинке.jpg");
bitmap.GetPixel(e.X, e.Y).GetBrightness();
3. взять еще 1 зону (10-20) пикселей от границ пятна, и тоже определить яркость.

зоны 2-3 должно хватить (яркость должна уменьшаться).

Большое вам за такой развернутый ответ.

Автор: jonie 20.9.2010, 22:21
Цитата(zaksys @  17.9.2010,  19:14 Найти цитируемый пост)

А можно по подробнее про данный алгоритм пожалуйста. Если есть ссылка на электронный ресурс, поделитесь. Буду очень рад.

А что алгоритм-то http://www.google.com/search?q=hofe+transform&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox#hl=en&client=firefox&hs=DuR&rls=org.mozilla:ru:official&&sa=X&ei=GrOXTLbkIeGcOKGEvbIK&ved=0CCUQBSgA&q=hough+transform&spell=1&fp=7b3e9e0669ddb0a1 вообще? Прочтите книжку какую чтоли ради приличия какую ... а еще почитайте про фильтры, например фильтр Габора ...

я уж молчу что по словам "блики изображение определить хафа" нагугливаются http://docs.google.com/viewer?a=v&q=cache:xsyWh740DtIJ:www.phys.msu.ru/upload/iblock/c6e/2004-00-00-nikolaev.pdf+%D0%B1%D0%BB%D0%B8%D0%BA%D0%B8+%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D1%8C+%D1%85%D0%B0%D1%84%D0%B0&hl=en&pid=bl&srcid=ADGEESjF2eVL8DVs4hgP2qUqgaM2WXVSvtGnWAWXfmp_moLZlKY6fQ7xrMvvGN4Scj-Gq2pUINfX0fCJ4DBSixd7V6Jhj53AJnAjcDXdu1zlrzwBpnf-nO_yL8hZyXmESXIQzhStQ2I4&sig=AHIEtbR-qlBr7dZW4VT-mFcI5UWyHhDe_w и даже по-русски....

Да вы, уважаемый, ленив имхо.

Автор: zaksys 21.9.2010, 09:06
Цитата(jonie @ 20.9.2010,  22:21)
Цитата(zaksys @  17.9.2010,  19:14 Найти цитируемый пост)

А можно по подробнее про данный алгоритм пожалуйста. Если есть ссылка на электронный ресурс, поделитесь. Буду очень рад.

А что алгоритм-то http://www.google.com/search?q=hofe+transform&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox#hl=en&client=firefox&hs=DuR&rls=org.mozilla:ru:official&&sa=X&ei=GrOXTLbkIeGcOKGEvbIK&ved=0CCUQBSgA&q=hough+transform&spell=1&fp=7b3e9e0669ddb0a1 вообще? Прочтите книжку какую чтоли ради приличия какую ... а еще почитайте про фильтры, например фильтр Габора ...

я уж молчу что по словам "блики изображение определить хафа" нагугливаются http://docs.google.com/viewer?a=v&q=cache:xsyWh740DtIJ:www.phys.msu.ru/upload/iblock/c6e/2004-00-00-nikolaev.pdf+%D0%B1%D0%BB%D0%B8%D0%BA%D0%B8+%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D1%8C+%D1%85%D0%B0%D1%84%D0%B0&hl=en&pid=bl&srcid=ADGEESjF2eVL8DVs4hgP2qUqgaM2WXVSvtGnWAWXfmp_moLZlKY6fQ7xrMvvGN4Scj-Gq2pUINfX0fCJ4DBSixd7V6Jhj53AJnAjcDXdu1zlrzwBpnf-nO_yL8hZyXmESXIQzhStQ2I4&sig=AHIEtbR-qlBr7dZW4VT-mFcI5UWyHhDe_w и даже по-русски....

Да вы, уважаемый, ленив имхо.

Мне просто и так дел хватает без кодинга. Лучше уж спросить у знающих людей.

Автор: jonie 21.9.2010, 09:42
zaksys, ну если вы ничего не хотите сами делать - то "объявления о найме специалистов" - раздел для вас.

Автор: CYBERDREAM 21.9.2010, 09:50
Цитата(zaksys @ 21.9.2010,  09:06)
Мне просто и так дел хватает без кодинга. Лучше уж спросить у знающих людей.

тогда закрывай тему коль тебе не до кода. Тут трудоголиков нет) 
Форум не для того, чтобы тебе разжевали все, а направить и указать на решение, а Enter и jonie это уже с лихвой для тебя сделали

Автор: zaksys 21.9.2010, 15:03
Цитата(jonie @ 21.9.2010,  09:42)
zaksys, ну если вы ничего не хотите сами делать - то "объявления о найме специалистов" - раздел для вас.

Я хочу делать, и сам ищу материал. Когда у меня есть время.

Добавлено через 58 секунд
Цитата(CYBERDREAM @ 21.9.2010,  09:50)
Цитата(zaksys @ 21.9.2010,  09:06)
Мне просто и так дел хватает без кодинга. Лучше уж спросить у знающих людей.

тогда закрывай тему коль тебе не до кода. Тут трудоголиков нет) 
Форум не для того, чтобы тебе разжевали все, а направить и указать на решение, а Enter и jonie это уже с лихвой для тебя сделали

Я понимаю, и за это им огромное спасибо.

Автор: zaksys 7.10.2010, 11:45
Цитата(jonie @ 10.9.2010,  15:37)
Думаю можно использовать анализ на основе преобразования Хафа ...

Возможно, но я понимаю, чтобы можешь определить центр массы белой области, но ведь мы не можем определить радиус, так заранее неизвестно, что это за белая область. Мне кажется алгоритм Хафа, не сильно подходит, для этого дела. А вот для распознования линии очень хорошая вещь я так понял. В общем спасибо, вам за это.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)