В этом примере показано, как создать и применить фильтры, прочность которых увеличивается радиально наружу.
Чтение и отображение изображения.
I = imread('peppers.png');
I = im2double(I);
imshow(I)
Создайте размытую копию изображения с помощью Гауссова фильтра со стандартным отклонением 2.
Iblurred = imgaussfilt(I,2); imshow(Iblurred)
Создайте изображение веса как Гауссов фильтр того же размера изображения. Чтобы увеличить фрагмент изображения, которая выглядит резкой, увеличьте значение filterStrength
.
filterStrength = 50;
weights = fspecial('gaussian',[size(I,1) size(I,2)],filterStrength);
imshow(weights,[])
Нормализуйте изображение веса в области значений [0, 1] с помощью rescale
функция.
weights = rescale(weights);
Создайте взвешенное размытое изображение, которое является взвешенной суммой оригинального изображения и размытого изображения. MATLAB автоматически воспроизводит матрицу веса для каждого из цветовых каналов R, G и B.
IweightedBlurred = I.*weights + Iblurred.*(1-weights);
Отобразите результат. Изображение остро в центре и становится более размытым радиально наружу. Чтобы увеличить фрагмент изображения, которая выглядит резкой, увеличьте значение
imshow(IweightedBlurred)
Получите размер изображения.
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)
Примените функцию взвешивания к изображению и отобразите результат.
I2 = I.*weights; imshow(I2)