Кодирование UnsharpMask без функций Фурье - PullRequest
5 голосов
/ 18 января 2010

Я делаю некоторый код обработки изображений в C #, но я не могу использовать любые библиотеки или GNU-подобный код.

Функция UnsharpMask зависит от размытия по Гауссу, которое, в свою очередь, зависит от преобразования Фурье.Я написал код для всего этого, и все работает, но, если коротко, мне нужно удалить функции FFT.Есть ли способ выполнить нерезкую маску другим способом, который, возможно, не требует БПФ?

Ответы [ 3 ]

3 голосов
/ 18 января 2010

Часть преобразования Фурье гауссова размытия - это просто эффективный способ свертки с ядром Гаусса. Вы можете сделать это, используя прямую свертку с ядром Гаусса с соответствующим стандартным отклонением и размером (ядро нечетного размера примерно в 5-6 раз больше стандартного отклонения примерно справа).

См. Свертка в Википедии .

2 голосов
/ 02 февраля 2010

Я нашел решение, соответствующее моим потребностям.

Я попробовал несколько быстрых и грязных алгоритмов размытия и нашел достаточно Box Blur и Stack Blur Размытие в стеке имеет более чистое размытие, чем в Box Blur, и в несколько раз быстрее, чем Gaussian. Поэтому я могу использовать любой из них вместо гауссовского.

Так что теперь я могу избавиться от всего беспорядка кода FFT и заменить его чем-то намного более управляемым. Это решение может быть не для всех, но поскольку UnsharpMask основан на размытии, я не чувствовал, что это слишком точная наука.

Кстати, гауссово размытие в Gimp, похоже, также избегает БПФ.

0 голосов
/ 19 января 2010

Я считаю, что даже если вы не можете использовать какие-либо библиотеки или GNU, вы можете посмотреть на их реализацию и попытаться воспроизвести аналогичный код для ваших требований?

список функций openCV. проверьте подробности функции здесь и затем детали реализации в заголовочных файлах. http://opencv.willowgarage.com/documentation/genindex.html

Также, если вы заинтересованы в реализации на C #, я бы предложил следующее http://aforgenet.com/framework/

...