Обработка изображений с использованием MATLAB, матрицы - PullRequest
0 голосов
/ 20 ноября 2010

В настоящее время я работаю с 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

1 Ответ

2 голосов
/ 21 ноября 2010

Да.Конкатенация, например:

A = [1 2 3; 4 5 6];  % Matrix
B = [7; 8];          % Column vector
C = [A B];           % Concatenate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...