`filter2`在这段代码中做了什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了`filter2`在这段代码中做了什么?相关的知识,希望对你有一定的参考价值。

function G=costfunction(im) 
   G=zeros(size(im,1),size(im,2));
   for ii=1:size(im,3) 
      G=G+(filter2([.5 1 .5; 1 -6 1; .5 1 .5],im(:,:,ii))).^2; 
   end
end

这里,im是输入图像(rgb图像)。这个成本函数将返回什么?

答案

这一点:

filter2([.5 1 .5; 1 -6 1; .5 1 .5],im(:,:,ii))

Laplace filter应用于im的一个2D切片。通常,拉普拉斯滤波器实现为[0 1 0; 1 -4 1; 0 1 0][1 1 1; 1 -8 1; 1 1 1]。我想无论是谁编写这段代码都无法在这两者之间做出决定并取平均值。

循环遍历3D图像im中的每个2D切片,并将每个结果的平方加在一起。如果im是RGB图像,它会将滤镜应用于每个颜色通道,并添加结果的平方。

拉普拉斯算子对图像中的细线以及图像边缘周围的响应(正和负)给出强烈的负面响应。通过取平方,所有回答都是积极的。请注意,成本函数在边缘上将接近于零,但在边缘的内部和外部都是高的。

另一答案

假设filter2与用于图像处理的相同(如问题中标记的那样)它应该进行2d线性滤波,im将使用2d FIR滤波器在矩阵[.5 1 .5; 1 -6 1; .5 1 .5]中对其数据进行滤波。对于回归,G应该是zeros(size(im,1),size(im,2))加上那里的所有处理过的图像。

以上是关于`filter2`在这段代码中做了什么?的主要内容,如果未能解决你的问题,请参考以下文章

(一元)* 运算符在这段 Ruby 代码中做了啥?

Batch-API:我在这段代码中做错了啥?

逗号运算符在“eval()”中做了啥?

这段代码中的“”是啥,它的基本作用是啥?

ffmpeg.c pts 和 dts 是啥?这个代码块在 ffmpeg.c 中做了啥?

C #include语句在Fortran代码中做了什么? [关闭]