В этом примере показано, как создать и применить фильтры, сила которых увеличивается радиально исходящий.
Считайте и отобразите изображение.
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)