【发布时间】:2019-02-08 05:38:41
【问题描述】:
以下例程从图像中减去平均值,使其更清晰。
- im 是一个图像矩阵。
- sz 是一个整数。
此例程的工作原理:
- 图像首先转换为双精度图像。
-
sz的一半用作 pad-size 值(这意味着该例程将对图像应用卷积)。 - m 是图像的高度,n 是图像的宽度,o 是否。图像中的通道数。
- 大小为
szxsz的二维数组初始化为1s。 - 声明了一个 for 循环,该循环适用于三个迭代,因为该例程将在每个通道上应用卷积操作。
-
im(:,:,q)表示过滤器已就地应用。 -
same表示卷积操作返回卷积的中心部分,与im大小相同。 IE。它正在裁剪卷积输出。
。
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,:);
为什么conv2()的输出除以sz^2?
【问题讨论】:
-
pad是几乎所有函数的整数,但在最后一行之后是一个 3 维矩阵 -
问题不清楚
-
@ChanakaAmarasinghe,哪一部分?
标签: matlab image-processing octave