Алгоритмы определения расфокусировки изображения?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.134] |
|
|
правила раздела Алгоритмы

Алгоритмы определения расфокусировки изображения?
|
Сообщ.
#1
,
|
|
|
|
Народ!!! УМОЛЯЮ,...
помогите, кто чем сможет!!! У меня маленький деть и ноль знаний по цифровой обработке изображения. А тема диплома из этой "оперы". Я Вас очень прощу помочь, кто чем сможет - хоть ссылки на инфу кинте...а то времени с дитем искать нету((( ...программировать ваще разучилась...или не умела? История такая: есть ГОК, где добывают руду, потом руду обогащают, потом дробят до состояния муки. Из этой муки делают окатыши. Задание такое: окатыши идут по конвееру, их надо снимать камерой и сравнивать полученную картинку с эталонной на наличие расхождения параметров, например размера. Надо написать алгоритм расфокусировки изображения.. Подскажите какие есть способы этой расфокусировки, кроме Фурье...препод хочет не Фурье... Но можно и Фурье - это лучше чем ничего... Заранее благодарна |
|
Сообщ.
#2
,
|
|
|
|
Так что - нужно управлять видеокамерой, обеспечивая фокусировку получаемого
изображения или пытаться как-то программно сфокусировать уже полученное изображение ? Если первое - ищи информацию на тему "экстремальное регулирование", а если второе - можно применять двумерную фильтрацию (сверткой), либо производить фильтрацию с использованием двумерного Фурье- либо вейвлет- преобразования. |
|
Сообщ.
#3
,
|
|
|
|
Надо программно расфокусировать полученное изображение и эталонное, потом их сравнить и если расхождение больше какой-то установленной цифры, выдать сигнал...
А может, кто прогу поможет написать? |
|
Сообщ.
#4
,
|
|
|
|
посмотри http://algolist.manual.ru/graphics/filter/index.php
про общие принципы фильтрации и про размывание. В данном случае нужно именно размывание. |
|
Сообщ.
#5
,
|
|
|
|
Просто размыть изображение - дело нехитрое, а вот сделать прогу,
которая бы принимала изображение чего-то наваленного россыпью и движущегося на конвейере и сравнивала все это с каким-то эталоном... Это - совсем другое дело. Кстати, можно попробовать сравнивать положение пиков в двумерных Фурье- спектрах эталона и образца. |
|
Сообщ.
#6
,
|
|
|
|
я не зню, движущуюся картинку надо сравнивать или просто кадры...
скорее всего движущуюся |
|
Сообщ.
#7
,
|
|
|
|
наверное по минимальности ширины линий? Или...
|
|
Сообщ.
#8
,
|
|
|
|
Честно говоря, не очень понял что именно нужно. На сколько я представляю - тебе нужно просечь то что руда фигово измельчена, и если это так, то устроить большой шухер. Дело достойное.
Можно сделать так: 1: Уменьшаешь изображение до N-х размеров(в зависимости от допустимого размера частицы), используя, например, бикубическую интерполяцию. На этом этапе все мелкие комочки руды сольются в один цвет. 2: Проверяешь все точки изображения - находишь количество точек цвет которых слишком сильно отличается от допустимого цвета руды. 3: Если таких точек слишком много, то Alarm и не спать. Вот и все. И так с каждым кадром. |
|
Сообщ.
#9
,
|
|
|
|
Вот оказывается все как: (после беседы с преподом, который сам толком не знает что от меня хочет)
есть конвеер с окатышами, изображение которых снимается камерой. Окатыши, эти фиговы, должны быть определенного размера. Задача состоит в том, что надо определить произошла расфокусировка камеры, снимающей конвеер или нет. Предлагается преподом это сделать так: (приветствуются и другие решения) есть эталонное изображение - т.е изображение, где все эти шарики практически идеальны. Мы раскладываем это изображение в спектр. Получаем гистограмму. Затем накладываем на эталонное изображение маску: получаем расфокусированное изображение. Снова раскладываем в спектр. и так N раз (пока не надоест наверно) - самой надо определить сколько раз. Потом берем другую маску и тоже самое проделываем (кол-во масок тоже надо определить самой). По полученным гистограммам надо визуально определить какие частоты влияют на расфокусировку изображения, на каком этапе изображение можно считать не резким. Из этой визуальной оценки определяем диапазон нерезкозти - так его что ли назвать - т.е. в реальной жизни шарики не эталоны, т.е расхождение с эталоном все равно будет, надо определить только на сколько может отличаться реальная картинка от идеальной. Затем работаем с реальным изображением - раскладываем в спектр - сравниваем с эталоном: совпало, значит все супер - камера работает нормально, не совпало - значит надо смотреть - попло это в допустимый диапазон нерезкозти или нет, если не попало, то выдаем сообщение, что камера расфокусировалась. Воот!!! Может есть какие у кого мысли по этому поводу? Делитесь не стесняйтесь, а то я вот в панике, думаю не пойти ли в академ...хоть и осталось тока диплом защитить. Человеки!!! Помогите пожалуйста!!! Тяжело мне с грудным ребенком...а дбить универ надо(((( |
|
Сообщ.
#10
,
|
|
|
|
Вот значит все как. На счет диплома - сочуствую, сам получил 2 месяца назад, так что бессонные ночи и мегалитры кофе все еще в памяти \%). Но тебе кофе вдвойне противопаказано, а то ведь ребенок вместо молока будет куппучино прихлебывать.
В общем, тебе нужна какая то функция, дающая оценку размытости изображения. При этом тебе известно значение этой функции для сфокусированного. Как вариант - этой функцией может быть сумма отличий каждой точки изображения от четырех соседних точек. У размытого изображения различия будут небольшими, у сфокусированного соотвественно наоборот. Соответственно разок, для себя запускаешь эту функцию для заведомо сфокусированного изображения, записываешь на бумажку значение которое она выдаст. А в программе, выполняешь функцию для каждого кадра, и сравниваешь получаемое значение с тем что ты перепишешь с бумажки. Если расхождение большое - значит камера расфокусировалась. |
|
Сообщ.
#11
,
|
|
|
|
помоему вообще незачем мучаться с расфокусировкой камеры. насколько я понимаю, камера должна быть накрепко привинченной к пъедесталу и свысока взирать на окатышей раз и навсегда сфокусированным взором. более того, ежели окатыши идут последовательно с достаточно большим интервалом, даже при вконец (в разумных пределах ;D ) расфокусированной камере можно довольно надёжно определить их размер. просто считаешь среднюю яркость по всему изображению (вариант: считать количество тех точек, где яркость больше пороговой - он мне больше нравится). соответственно график этой функции от времени будет выглядеть приблизительно так:
_______ ______ / \ / \ ____/ \_______/ \_____........ когда опарыш будет проходить в поле зрения камеры, функция будет испытывать максимум, а когда в поле зрения ничего не будет - минимум. соответственно по величине максимума (или его разности с минимумом) можно судить о размере опарыша. что касается фурье, то препод по-своему прав - там слишком большой объём вычислений. ежели уж тебе настолько сильно приспичило нахождение расфокусировки, то слушай моё предложение. надо найти среднее по изображению значение квадрата функции, представляющей собой разность яркости точки с усреднённой яркостью четырёх её соседей. если камера расфокусировалась, то эта величина будет маленькой в силу усреднения яркостей. зы. тут я заметил, что умные люди уже предложили вышеописанную функцию, поэтому, чтобы как-то отличиться, предлагаю ещё одно усовершенствование: вычислять разность не с четырьмя, а с двумя соседями - справа и слева, ибо по идее размытие изотропно. причём надо вычислять не просто разность, а КВАДРАТ этой разности, аналогично тому, как это происходит в математической статистике. замечу также, что разность всего лишь с одной точкой не подойдёт, ибо на эту разность оказывает сильное влияние общий градиент яркости. |
|
Сообщ.
#12
,
|
|
|
|
Вот еще инфа по заданию: вспомнил мой любимый "руководитель" о такой им же опубликованной некогда статье)))
СПОСОБ ОЦЕНКИ ГРАНСОСТАВА СЫРЫХ ЖЕЛЕЗОРУДНЫХ ОКАТЫШЕЙ В металлургической промышленности всегда актуально сокращение материальных и энергетических ресурсов. В частности, такой задачей является экономия компонентов шихтоподготовки железорудных окатышей и сокращение брака при их окомковании. Для ее решения необходимо оперативно оценивать гранулометрический состав сырых окатышей. Существующие способы оценки обладают достаточно высокой погрешностью (20-22\%). Предлагается использовать способ оценки грансостава, основанный на использовании системы технического зрения, состоящей из телевизионной камеры, цифрового видеоввода (видеобластер) и компьютера. Принцип действия системы заключается в следующем. С помощью телевизионной камеры с движущегося транспортера снимается изображение верхнего слоя окатышей. Учитывая небольшую глубину слоя окатышей (5-6 см.) и случайный угол скатывания сырых окатышей с турели окомкователя можно утверждать, что окатыши перемешаны равномерно и изображение верхнего слоя адекватно отображает всю массу окатышей на транспортере. Полученный телевизионный кадр вводится в память компьютера при помощи видеобластера, который преобразует его в матрицу размером 256х256 элементов изображения. Каждый элемент квантуется на 64 уровня серого. Полученная матрица обрабатывается методами цифровой обработки изображений. При этом считается, что основным признаком окатыша является так называемый яркостной блик, от центра которого производится сканирование по 8 или 16 направлениям с целью определения радиусов окатыша. Полученная в результате сканирования последовательность, для снижения погрешности подвергается медианной обработке. Перед сканированием для удаления высокочастотного шума производится низкочастотная фильтрация при помощи маски размером 7х7. Результатом работы является гистограмма распределения диаметров окатышей для конкретного кадра. Как показали испытания, новый способ имеет погрешность измерения около 10\%. Усреднение гистограмм по нескольким кадрам дает объективную оценку грансостава окатышей. Оперативная информация о грансоставе сырых окатышей позволит создать систему автоматизированного управления процессом окомкования. |
|
Сообщ.
#13
,
|
|
|
|
Дак всё таки, что тебе нужно? Определить расфокусировалась ли камера, или узнать средний размер окатышей?
|
|
Сообщ.
#14
,
|
|
|
|
2татулька
чойто я не пойму, твой препод уже написал подобную программу или нет? я думаю, что тут вообще можно обойтись без оценки размеров по 8 или 16 направлениям. просто надо усреднить изображение так, чтобы "средний" окатыш занимал около 8 точек в диаметре, и подсчитать кол-во максимумов яркости (точек, чья яркость больше яркости любого из 8 её соседей). радиус окатыша будет обратно пропорционален данной функции: R=k/N, где k - козффициент, вообще говоря, определяемый экспериментально. что же касается того, чтобы эту программу написали за тебя, тут возникает ряд вопросов. на каком языке? надо ли программно обращаться к камере или достаточно написать процедуру вроде function r(a: array[0..255, 0..255] of integer)? и вообще, ты бы прислала образец фотографии поля зрения камеры, ведь оно может быть совсем не таким, как я его себе представляю, а от этого зависит способ решения. зы. я бы такие вещи не слал в приват, а писал прямо тут |
|
Сообщ.
#15
,
|
|
|
|
**Дак всё таки, что тебе нужно? Определить расфокусировалась ли камера, или узнать средний размер окатышей?
Сама задаюсь этим вопросом...каждый раз разное мой дяденька хочет)) В ПОСЛЕДНИЙ раз вроде сошлись на определении расфокусировки камеры. |
|
Сообщ.
#16
,
|
|
|
|
**чойто я не пойму, твой препод уже написал подобную программу или нет?
Нет, не написал, иначе зачем ему эту тему мне на диплом втюхивать? просто есть у меня подозрения, что хочет он... эээ, как бы сказать: "на чужом горбу в рай въехать"... НО видать я его разочаровала - сошлись на частичном решение задачи, т.е. не на построении системы технического зрения, а лишь на определении расфокусировки камеры. (по крайней мере на сегодняшний день) **что же касается того, чтобы эту программу написали за тебя, тут возникает ряд вопросов. *на каком языке? думаю на любом)) никто на дипломе в код не полезет)) *надо ли программно обращаться к камере или достаточно написать процедуру вроде function r(a: array[0..255, 0..255] of integer)? это мне и самой не понятно, но было сказано, что работаем токо с компом..."хотелось бы конечно, чтобы программа посылала сигнал камере на снятие контрольных изображений..." Сложно с ним общаться: сам он определиться видать со сложностью задачи не может; спрашиваю про параметры изображения, а в ответ ХЗ - сама выбери типа скоко шариков, какой фон... т.е. я говорит ничего не знаю, есть вот такая задача, а как ты ее реализовывать будешь твои проблемы... **и вообще, ты бы прислала образец фотографии поля зрения камеры, ведь оно может быть совсем не таким, как я его себе представляю, а от этого зависит способ решения. я просила его выслать мылом...но пока нет. Схожу в понедельник в универ - принесу. ****зы. я бы такие вещи не слал в приват, а писал прямо тут Думаешь просто сознаться всему народу, что ты тормоз? Лано, сознаюсь!!! Не знаю как все, но я с рождением ребенка отупела видимо...не покидает надежда, что это временно)) попытки въехать в ситуЁвину в перерывах между кормлениями, гуляниями, катаниями машинки и т.п. + вытуриванию с компа главного ГЕЙМЕРА - мужа пока никчему не привели(((( Поэтому: ЕСЛИ ЕСТЬ ЖЕЛАЮЩИЕ МНЕ ПОМОЧЬ - ОТЗОВИТЕСЬ!!!))) Татулька |
|
Сообщ.
#17
,
|
|
|
|
Но мы ведь точно не сможем
выяснить у препода, чего же он хочет. |
|
Сообщ.
#18
,
|
|
|
|
2татулька
насколько я понимаю, подобный проект должен быть направлен на практическое применение, а у тебя нет никаких аппаратных средств, чтобы проверять работоспособность программы. как вообще будет проходить сдача курсовой? без эксперимента не обойтись. тебе надо или поехать на этот гок, или купить веб-камеру и научиться к ней программно обращаться. добываешь кучу шариков, насыпаешь перед камерой и запускаешь программу. |
|
Сообщ.
#19
,
|
|
|
|
IMHO - не парься на счет работы с камерой. Займись алгоритмом, пусть он работает с последовательностью BMP файлов - для диплома этого достаточно. Главное что бы было что показать экзаминационной комиссии, ты ведь не собираешся на защиту конвеер с окатышами принести. Поэтому последовательности BMP им хватит за глаза и за уши. А на защите уже скажешь, что мол, разработанный алгоритм пригоден для обработки, в реальном времени, данных поступающих с видеокамеры.
Не гарантирую что это будет работать, но попробуй написать что то в этом роде. Я не знаю на чем ты собираешся писать программу, поэтому код достаточно абстрактный. // функция для оценки резкозти изображения long getContrast( CMyImage* img ) { long contrast=0; int x,y; // перебираем все точки изображения for(x=1; x<img->getWidth()-1; x++) for(y=1; y<img->getHeight()-1; y++) { long aY = img->Y(x,y); // яркость точки. если изображение цветное, // то нужно усреднить GRB компоненты. // суммируем отличия яркости текущей точки от яркости окружающих // если, мало ли, оценка окажется неэффективной, попробуй // суммировать квадраты разницы, а не модули. contrast += abs(img->Y(x-1,y) - Y); contrast += abs(img->Y(x+1,y) - Y); contrast += abs(img->Y(x,y+1) - Y); contrast += abs(img->Y(x,y-1) - Y); } } // В твоей программе будет функция, которая будет // обрабатывать поступающие кадры. Выглядеть она будет примерно так: void onNewFrame( CMyImage* img ) { // NORMAL_CONTRAST - константа. Значение функции getContrast(), // характерноедля сфокусированного изображения. // EPS - допустимое отклонение от нормы. if( abs( getContrast( img )-NORMAL_CONTRAST ) > EPS ) { stopConveer(); Alarm(); startSelfDestruction(); } } По большому счету это все что тебе нужно. Конечно остается много "мелочей" - загрузка BMP(или других файлов), вывод их на экран и т.п. Но все это уже на твое усмотрение. На счет тестирования. Твоему алгоритму в общем все равно с чем иметь дело, с окатышами, банками чёрной икры или пакетиками героина. Поэтому проверять можешь на любой картинке. Сделай небольшую последовательность картинок, на которой движеться что то более менее однородное. Потом, в фотошопе, размой эти кадры. И запусти программу, заменив пару кадров из исходной последовательности их размытыми эквивалентами. Если программа это заметит, то все в порядке, если нет, то попробуй поварьировать параметры (EPS например). И запомни, мы живем во время, когда упаковка важнее товара. Напиши хоть как то работающую программу, подготовь хороший отчет, и обяательно сделай красивые плакаты и хорошие раздаточные материалы. Для твоих преподавателей посмотреть "мультик" который ты им покажешь намного интерестнее, чем решенная тобой проблема . |
|
Сообщ.
#20
,
|
|
|
|
Всем здрасте!!
Сдавала госсы... У меня к вам вопрос, может мне кто помочь с написанием проги? Можно даже обсудить материальный аспект,...если альтруистов не найдеться... Надо определить произошла рассфокусировка изображения или нет.. и все, т.е. аппаратное управление камерой не требуется, обрабатываются файлы с уже отцифрованным изображением.. Татулька |
|
Сообщ.
#21
,
|
|
|
|
А препод предложил какой-то конкретный метод обработки ?
А то ведь как - потом, бывает, оказывается, что ему бы хотелось видеть что-то совсем-совсем другое... |
|
Сообщ.
#22
,
|
|
|
|
нет, не предложил...
сказала, что у меня уже нет времени - буду делать через Фурье))) не возражал |
|
Сообщ.
#23
,
|
|
|
|
ну так тебе надо определить размер окатышей или резкость?
если резкость, то фактически wintermute уже всё написал, и без всякого фурье. или тебе лучше на паскале? когда у тебя защита? |
|
Сообщ.
#24
,
|
|
|
|
Да и с фурье что за проблемы в интернете программ до фига (да и сам могу поделится)
Гистограмму это вооб ще не фиг делать. |
|
Сообщ.
#25
,
|
|
|
|
Защита у меня в июне..но еще оформлять)))
Гистаграммы может и фигня, но я, каюсь, не программировала года три - вообще))) тока не спрашивайте, как это я до пятого курса на радиофаке доучилась))) Татулька. |
|
Сообщ.
#26
,
|
|
|
|
Определить надо резкое изображение или нет...на размер окатышей уже точно забили)))
|
|
Сообщ.
#27
,
|
|
|
|
а в ответ тишина(((
|
|
Сообщ.
#28
,
|
|
|
|
а я-то думал, что надо создать искусственный интеллект..
ну тогда разбирайся в исходнике, присланном wintermute. кстати можно придумать ещё одно улучшение: нормировать резкость на разброс яркости (или её дисперсию). |