我目前正在使用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
function sharpen_image = img_sharpen(img)
blur_image = medfilt2(img);
convolution(img, filter);
edge_image = img - blur_image;
sharpen_image = img + edge_image;
end
答案 0 :(得分:2)
是。连接,例如:
A = [1 2 3; 4 5 6]; % Matrix
B = [7; 8]; % Column vector
C = [A B]; % Concatenate