使用MATLAB,矩阵进行图像处理

时间:2010-11-19 22:46:19

标签: matlab image-processing

我目前正在使用MATLAB进行一些图像处理。我已经设置了一个任务,基本上重新创建卷积函数来应用过滤器。我设法使代码工作正常,一切似乎都很好。

下一部分是让我做以下事情..

为给定图像的unsharp masking编写自己的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 个答案:

答案 0 :(得分:2)

是。连接,例如:

A = [1 2 3; 4 5 6];  % Matrix
B = [7; 8];          % Column vector
C = [A B];           % Concatenate