Увеличьте силу фильтра, радиально исходящую

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

Считайте и отобразите изображение.

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

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

Размойте изображение Используя гауссову функцию взвешивания

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

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

Figure contains an axes object. The axes object 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 object. The axes object 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 object. The axes object contains an object of type image.

Изображение Vignette Используя 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 object. The axes object contains an object of type image.

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

I2 = I.*weights;
imshow(I2)

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

Смотрите также

|