用于图像过滤的MATLAB函数

时间:2017-05-28 13:36:18

标签: matlab imagefilter

我正在寻找实现自己的Matlab函数,可用于计算3x3内核的图像过滤。

必须是这样的:function [ output_args ] = fFilter( img, mask ) 其中img是原始图片,mask是内核(例如B = [1,1,1;1,4,1;1,1,1]

我不应该使用Image Processing Toolbox中的任何内置函数。

我必须使用这个

formula

其中:

s是过滤后的图像

p是过滤器前的图像

M是内核

如果sum(sum(M))== 0,则

和N为1否则N = sum(sum(M))

我是MATLAB的新手,对我来说这就像是黑魔法-_-

1 个答案:

答案 0 :(得分:0)

这应该做的工作(没有经过验证):

function [ mO ] = ImageFilter( mI, mMask )
%UNTITLED2 Summary of this function goes here
%   Detailed explanation goes here

numRows = size(mI, 1);
numCols = size(mI, 2);

% Assuming Odd number of Rows / Columns
maskRadius = floor(siez(mMask, 1) / 2);

sumMask = sum(mMask(:));

if(sumMask ~= 0)
    mMask(:) = mMask / sumMask;
end

mO = zeros([numRows, numCols]);

for jj = 1:numCols
    for ii = 1:numRows
        for kk = -maskRadius:maskRadius
            nn = kk + 1; %<! Mask Index
            colIdx = min(max(1, jj + kk), numCols); %<! Replicate Boundary
            for ll = -maskRadius:maskRadius
                mm = ll + 1; %<! Mask Index
                rowIdx = min(max(1, ii + ll), numRows); %<! Replicate Boundary
                mO(ii, jj) = mO(ii, jj) + (mMask(mm, nn) * mI(rowIdx, colIdx));
            end
        end
    end
end


end

以上是具有复制边界条件的经典相关(图像过滤)。