Размытие изображения с неравномерным фильтром

Я новичок в Stackoverflow, и это мой первый вопрос, поэтому, пожалуйста, будьте терпеливы со мной.

Я хочу размыть изображение с неравномерным фильтром. Однако я не совсем понял, что такое неравномерный фильтр, и я хотел бы спросить, что именно делает неравномерный фильтр, и как его можно интуитивно понимать в терминах код. Я хочу реализовать это в Matlab. Вот пример моего кода.

Неравномерным ядром было бы то, что

init= imread('cameraman.jpg');
initial = rgb2gray(init);
sigma=3;
H_filt = fspecial('gaussian',[5 5], sigma);

или будет ограничиваться только одним измерением?

init= imread('cameraman.jpg');
initial = rgb2gray(init);
sigma=3;
H_filt = fspecial('gaussian',[5 1], sigma);

Заранее благодарен!

2 ответа

Неравномерные ядра размытия

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

Чтобы привести несколько примеров:

  • размер ядра размытия вне фокуса зависит от расстояния между камерой и точкой сцены (обычно это называется Z). Это явление можно использовать с помощью алгоритмов сфокусированного от дефокусировки;
  • движущийся объект в статической сцене может подвергаться размытию движения, в то время как в статических деталях, очевидно, нет размытости. У разных движущихся объектов действительно могут быть разные размытия движения;
  • объектив камеры обычно создает лучшие (четкие) изображения в центре по отношению к его границам.

Как создать неравномерно размытое изображение

Это зависит от количества размытых ядер вашего изображения и какого размытия вы хотите подражать.

  • Размытость размытия (функция расстояния от точки камеры и камеры) может быть смоделирована программным обеспечением трассировки лучей.
  • Если вы хотите создать неравномерное размытие после обработки (свертки), вам необходимо:
    1. Получите ядро размытия для пикселя под рукой (i,j): например sigma_ij = f(i,j)
    2. Соедините свое входное изображение (резкое, чистое) с помощью этого ядра размытия: H_ij = fspecial('gaussian', [some large size], sigma_ij])
    3. Запишите результат на ваше выходное изображение: I_final[i,j] = I_blurred_with_Hij[i,j]
    4. Перейдите к следующему пикселю.

В некоторых случаях вы можете отрезать эту жадную петлю с правильными предположениями (ограничение размера размытия, только два или три возможных размытия изображения).


Обычно они означают фильтр, который не является постоянным для каждого пикселя → Он не является однородным пространственно. Попробуйте реализовать гауссовское размытие, которое на каждом пикселе отличается от стандартного отклонения.

Быстрый способ сделать это - использовать colfilt.

Если вам нужна дополнительная помощь, дайте мне знать.

licensed under cc by-sa 3.0 with attribution.