У мене є двовимірне зображення, яке я хочу знизити у фільтр, з такими показниками обмежень / якості:
- Я не можу "додати" світло до зображення, тому кожен піксель у результаті повинен бути <= відповідний піксель на вході.
- Частота відсікання низької частоти повинна бути параметром, з яким можна експериментувати
- Застосування цього фільтра неодноразово не повинно суттєво змінити результат.
- Час, необхідний для запуску цього алгоритму (5 хвилин для 5MPix зображення здається розумним)
- Мінімізація кількості світла, яке фільтрується.
Нижче наведено кілька підходів, які я спробував, разом із їхніми недоліками:
Гауссовий фільтр подобається нормальному, а потім потягніть результат вниз, щоб відповідати обмеженню 1. Це дуже добре відповідає першим 3 балам, але зменшує набагато більше світла, ніж потрібно.
Встановлення парабол "вгору" через "низькі" точки і параболи "вниз" між ними, щоб згладити. Це чудово працює в 1D, але застосовуючи його спочатку горизонтально, потім вертикально дає погані результати в 2D. Це займає набагато більше часу, але не надто довго для мого застосування. Однак повторне застосування цього фільтра різко змінить результат. Якщо вхід (1D) є ідеальною "низхідною" параболою (яку взагалі не слід фільтрувати), її замінять 2 "вгору" параболи, що сидять на початку / кінці.
Використовуючи деяку іншу форму 2D "базових" функцій та лінійне рішення, щоб знайти оптимальні параметри. Це ідея лише наразі, ще не реалізована / протестована.
Моя область досвіду обробки сигналів - це майже виключно обробка зображень, тому я сподіваюся знайти альтернативи цій проблемі із залученням експертів, що працюють в інших сферах обробки сигналів.
оновлення 2011/08/18
Виходячи з поточних реакцій, я вирішив зробити щось більш зрозумілим, додавши графіки типового введення та результати 3-х підходів, які я описав спочатку + пропозиції, які я отримав до цього часу. Для зручного порівняння в цих прикладах я використовував лише 1D фільтрацію.
Вхідні дані:
Гауссовий фільтр + збиває його, щоб він відповідав вимозі (1).
Ви можете бачити, що його зменшення призводить до непотрібного зменшення світла з правого боку.
Параболи
Що стосується мене, це дуже чудово, на жаль, воно не перекладається ідеально на 2D, застосовуючи спочатку горизонтальну, потім вертикальну. У цьому випадку ви також бачите, що я можу оцінити встановлені параболи за роздільною здатністю з плаваючою точкою, що є невеликою перевагою, але не є абсолютно необхідною.
Ерозія сірого
масштабу На підставі пропозиції rwong я спробував ерозію сірого масштабу. Я використовував структуруючий елемент з тією ж параболічною формою, що і мої "приталені" параболи. Результат майже однаковий, тому це виглядає перспективно. Однак є ще кілька проблем: 1. Мій структуруючий елемент не був "досить великим" (хоча він був уже в ширину 801 пікселів) до наступного.
Середня фільтрація
Включена лише для повноти, вона насправді не те, що я хочу.
необроблені дані
Я вставив необроблені вхідні дані + різні команди python на пастбін, тож ви можете експериментувати і з тими ж даними.
http://pastebin.com/ASnJ9M0p