Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > алгоритм определения четкости изображения


Автор: SHONY_S 7.11.2007, 12:17
Впервые столкнулся с такого рода задачей.
Есть 2 рисунка (к примеру), один из них четкий, другой размытый. 
Как программно определить который какой?
Рисунки могут быть разными, тоесть изображение на них может быть разное.
Может кто-то подскажет простенький алгоритм ... smile 

Автор: skyboy 7.11.2007, 13:17
хм. алгоритм - нет. пожалуй, есть идея.
можно считать абсолютной резкостью, когда две соседние точки имеют абсолютно разный цвет(000000 и FFFFFF) и абсолютная размытость - когда две соседние точки имеют цвет одинаковый(если под размытостью понимать влияние одних точек на цвет соседних).
Надо придумать алгоритм подсчета "коэффициента размытости" для всей картинки и алгоритм расчета степени одинаковости для двух точек.

Автор: SHONY_S 7.11.2007, 13:43
Цитата(skyboy @  7.11.2007,  13:17 Найти цитируемый пост)
"коэффициента размытости" для всей картинки и алгоритм расчета степени одинаковости для двух точек

хорошая идея, надо попробывать ...

Автор: maxim1000 7.11.2007, 15:37
можно ещё спектр посмотреть
размытие приводит к ослаблению высоких частот

Автор: SHONY_S 7.11.2007, 16:43
А как 
Цитата(maxim1000 @  7.11.2007,  15:37 Найти цитируемый пост)
спектр посмотреть
?
Можно описание алгоритма (или ссылку где найти), please!

Автор: maxim1000 7.11.2007, 18:00
хм... ну про спектр вообще очень много написано
ну... например, можно тут посмотреть http://en.wikipedia.org/wiki/Discrete_cosine_transform
не утверждаю, что самое лучшее для понимания - просто первое, что в голову пришло
впрочем, там, наверняка есть ссылки для более глубокого изучения...

Автор: IAV 7.11.2007, 23:55
Возможно попробовать вычислить градиент изображения... На размытом градиент в каждой точке толжен быть не слишком большой, в то время как на четком (границы контуров) - довольно значительный. Этот метод испоьзуют для выделения границ на изображениях, возможно стоит попробовать плясать дальше от него =)

Автор: skyboy 8.11.2007, 00:08
Цитата(IAV @  7.11.2007,  22:55 Найти цитируемый пост)
градиент изображения

о! вот он - критерий различия цветов двух соселних точек!

Автор: esperant0 8.11.2007, 07:21
для того чтобы ответить на ваш вопрос надо определить что такое четкое изображение. И это Ваша задача.


Например фотография белого листа идеально резка. Но и градиент и спектр там никакие, а потому и спасуют предложеннные выше методы

Автор: IAV 8.11.2007, 18:34
esperant0
Цитата(esperant0 @  8.11.2007,  07:21 Найти цитируемый пост)
Например фотография белого листа идеально резка
 - наверно предполагается что до такого извращения не дойдет =)

Цитата(skyboy @  8.11.2007,  00:08 Найти цитируемый пост)
Цитата(IAV @  7.11.2007,  22:55 )
градиент изображения


о! вот он - критерий различия цветов двух соселних точек!
 - я что-то не то сказал? 0_о

Автор: skyboy 10.11.2007, 09:28
Цитата(esperant0 @  8.11.2007,  06:21 Найти цитируемый пост)
фотография белого листа идеально резка

а по-моему - абсолютно размыта smile тут уж как кто представит.

Автор: esperant0 10.11.2007, 10:33
Цитата(skyboy @ 10.11.2007,  09:28)
Цитата(esperant0 @  8.11.2007,  06:21 Найти цитируемый пост)
фотография белого листа идеально резка

а по-моему - абсолютно размыта smile тут уж как кто представит.

Т.е вы сфотографировали белый лист и получили его нечеткое изображение? Как вам это удалось? 

Автор: SHONY_S 27.11.2007, 11:09
Большое спасибо Вам всем!
Хоть не все советы мне были предельно ясны но, вроде, мне удалось найти работающий вариант алгоритма определения четкости изображения...
Сделал вот что:
Считал в двумерный масив коды цветов рисунка (получилась матрица NxM),
начал отнимать столбцы этой матрицы и записывать результаты в другую матрицу, но размерностью N x M-1.
И т.д. пока конечная матрица не стала Nx1.
Получился столбец. 
Вот по нем я и определяю степень (коехициент) размытости, тоисть среднее арифметическое вектори или сумма всех его елементов.
Чем число больше, тем картинка четче. Соответственно, чем число ближе к нулю, тем картинка более размыта.

Основные недостатки метода:
* чем больше картинка, тем медленнее все работает;
* если брать только кусок изображения, то можно попасть на область однородного цвета (как писалось выше, белая картинак);

Автор: esperant0 27.11.2007, 12:10
Цитата(SHONY_S @ 27.11.2007,  11:09)
 
* чем больше картинка, тем медленнее все работает;

используй вероятностную версию.

Тогда можно получить быстрый алгоритм, не зависящий от размера изображения.

Автор: SHONY_S 29.11.2007, 12:53
А можно по подробнее о вероятносной версии....

Автор: esperant0 29.11.2007, 13:59
Цитата(SHONY_S @ 29.11.2007,  12:53)
А можно по подробнее о вероятносной версии....

дам пример.


Пусть у тебя есть картинка 256 степени серого


Ты хочешь знать картинка вся черная (255)  или в ней больше 10 процентов белых пикселей.


Предположим тебя устраивает если алгоритм ошибется с вероятностью 0.000001



Тогда алгоритм такой

-----------------
1) Случайно берем 1000 пикселей ( заметь не зависит от размера картинки)
2) Если среднее этих пикселей содержит не более 5 процентов белых говорим что картинка черная, иначе говорим что в картинке хотябы 10 % белых


google  property testing for image processing

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