Увеличение прочности фильтра в радиальном направлении наружу

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

Чтение и отображение изображения.

I = imread('peppers.png');
I = im2double(I);
imshow(I)

Figure contains an axes. The axes contains an object of type image.

Размытие изображения с помощью функции Гауссова взвешивания

Создайте размытую копию изображения с помощью Гауссова фильтра со стандартным отклонением 2.

Iblurred = imgaussfilt(I,2);
imshow(Iblurred)

Figure contains an axes. The axes contains an object of type image.

Создайте изображение веса как Гауссов фильтр того же размера изображения. Чтобы увеличить фрагмент изображения, которая выглядит резкой, увеличьте значение filterStrength.

filterStrength = 50;
weights = fspecial('gaussian',[size(I,1) size(I,2)],filterStrength);
imshow(weights,[])

Figure contains an axes. The axes contains an object of type image.

Нормализуйте изображение веса в области значений [0, 1] с помощью rescale функция.

weights = rescale(weights);

Создайте взвешенное размытое изображение, которое является взвешенной суммой оригинального изображения и размытого изображения. MATLAB автоматически воспроизводит матрицу веса для каждого из цветовых каналов R, G и B.

IweightedBlurred = I.*weights + Iblurred.*(1-weights);

Отобразите результат. Изображение остро в центре и становится более размытым радиально наружу. Чтобы увеличить фрагмент изображения, которая выглядит резкой, увеличьте значение

imshow(IweightedBlurred)

Figure contains an axes. The axes contains an object of type image.

Изображение Виньетки с использованием 1/R ^ 2 функции взвешивания

Получите размер изображения.

sizex = size(I,2);
sizey = size(I,1);

Укажите центр виньетки.

xcenter = size(I,2)/2;
ycenter = size(I,1)/2;

Задайте координаты x и y поверхности.

[X,Y] = meshgrid((1:sizex)-xcenter,(1:sizey)-ycenter);

Задайте радиус от центра в каждой координате (x, y).

R2 = X.^2 + Y.^2;

Задайте функцию взвешивания как обратную величину R, масштабированную до области значений [0, 1].

R2 = rescale(R2);
weights = (1-R2);
imshow(weights)

Figure contains an axes. The axes contains an object of type image.

Примените функцию взвешивания к изображению и отобразите результат.

I2 = I.*weights;
imshow(I2)

Figure contains an axes. The axes contains an object of type image.

См. также

|

Для просмотра документации необходимо авторизоваться на сайте