以下程序从图像中减去平均值,使其更清晰 .
-
im是图像矩阵 .
-
sz是一个整数 .
这个例程如何工作:
-
图像首先转换为double .
-
sz
的一半用作pad-size值(这意味着此例程将在图像上应用卷积) . -
m是图像的高度,n是图像的宽度,o是否 . 图像中的通道 .
-
2d数组大小
sz
xsz
初始化为1秒 . -
声明for循环,它在三次迭代中起作用,因为此例程将在每个通道上应用卷积运算 .
-
im(:,:,q)
表示过滤器已就地应用 . -
same
表示卷积运算返回卷积的中心部分,其大小与im
相同 . 即它正在裁剪卷积输出 .
.
function pad = erase_mean(im, sz)
im = double(im);
pad = floor(sz/2);
[m,n,o] = size(im);
mask = ones(sz,sz);
for q=1:o
im(:,:,q)=double(im(:,:,q))-conv2(double(im(:,:,q)),mask,'same')./sz^2;
mx=max(max(im(1+pad*2:m-pad*2,1+pad*2:n-pad*2,q)));
im(:,:,q)=(im(:,:,q)./mx).*255;
end;
mx = max(max(im(1+pad*2:m-pad*2,1+pad*2:n-pad*2,q)));
im = uint8((im./mx(1)).*255);
pad = im(1+pad*2:m-pad*2,1+pad*2:n-pad*2,:);
Why is the output of conv2() is divided by sz^2?
1 回答
注意
是相同的
这是因为卷积和乘法通勤 .
因此,卷积运算计算局部均值 . 没有分裂,它将是一个本地的总和 .