我正在寻找实现自己的Matlab函数,可用于计算3x3内核的图像过滤。
必须是这样的:function [ output_args ] = fFilter( img, mask )
其中img
是原始图片,mask
是内核(例如B = [1,1,1;1,4,1;1,1,1]
)
我不应该使用Image Processing Toolbox中的任何内置函数。
我必须使用这个
其中:
s是过滤后的图像
p是过滤器前的图像
M是内核
如果sum(sum(M))== 0,则和N为1否则N = sum(sum(M))
我是MATLAB的新手,对我来说这就像是黑魔法-_-
答案 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
以上是具有复制边界条件的经典相关(图像过滤)。