В настоящее время я работаю с MATLAB для обработки изображений. Мне поставили задачу воссоздать функцию свертки для применения фильтров. Мне удалось заставить код работать нормально, и все было в порядке.
Следующая часть была для меня, чтобы сделать следующее ..
Напишите свою собственную m-функцию для нечеткого маскирования данного изображения, чтобы создать новое выходное изображение.
Ваша функция должна применять следующие шаги:
- Применить сглаживание для получения размытой версии исходного изображения,
- Вычтите размытое изображение из исходного изображения, чтобы получить изображение края,
- Добавьте изображение края к исходному изображению, чтобы получить резкое изображение.
Опять же, у меня есть смоделированный код для этого, но я столкнулся с несколькими проблемами. При выполнении свертки мое изображение обрезается на один пиксель, это означает, что, когда я собираюсь выполнить вычитание, для повышения резкости изображения имеют разный размер, и вычитание не может иметь место.
Чтобы преодолеть это, я хочу создать пустую матрицу в функции свертки, которая будет того же размера, что и вводимое изображение, затем новое изображение будет помещено поверх этой матрицы, так что на новом изображении будет граница в один пиксель. вокруг, чтобы сделать его в исходном размере. Когда я пытаюсь реализовать это, все, что я получаю в качестве результата, это пустая матрица, которую я только что создал. Почему это происходит, и если да, то сможете ли вы помочь мне это исправить?
Мой код выглядит следующим образом.
свертка
function [ imgout ] = convolution( img, filter )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
[height, width] = size(img); % height, width: number of im rows, etc.
[filter_height, filter_width] = size(filter);
for height_bound = 1:height - filter_height + 1; % Loop over output elements
for width_bound = 1:width - filter_width + 1;
imgout = zeros(height_bound, width_bound); % Makes an empty matrix the correct size of the image.
sum = 0;
for fh = 1:filter_height % Loop over mask elements
for fw = 1:filter_width
sum = sum + img(height_bound - fh + filter_height, width_bound - fw + filter_width) * filter(fh, fw);
end
end
imgout(height_bound, width_bound) = sum; % Store the result
end
end
imshow(imgout)
end
Unsharpen
function sharpen_image = img_sharpen(img)
blur_image = medfilt2(img);
convolution(img, filter);
edge_image = img - blur_image;
sharpen_image = img + edge_image;
end