【问题标题】:What does `filter2` do in this code?这段代码中的 `filter2` 做了什么?
【发布时间】:2018-08-09 01:59:30
【问题描述】:
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 图像)。 这个成本函数会返回什么?

【问题讨论】:

    标签: matlab image-processing filtering


    【解决方案1】:

    这一点:

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

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

    循环遍历 3D 图像im 中的每个 2D 切片,并将每个结果的平方相加。如果im 是 RGB 图像,它将对每个颜色通道应用过滤器,并添加结果的平方。

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

    【讨论】:

    • * 我猜写这段代码的人无法在这两者之间做出决定并取平均值。* ?你知道为什么有人会这样做吗?我的意思是,是否有任何科学理由实际这样做?
    • @AnderBiguri:3x3 拉普拉斯滤波器是实际拉普拉斯的有限差分近似,您无法在离散网格上计算。开始时它们是糟糕的选择,因为它们对噪音敏感。尽管如此,它们还是有其用途的。 -4 版本是“正确”版本,作为沿每个轴的二阶导数之和。 -8 增加了角落,导致噪声敏感性降低。这里的 -6 看起来是一个更旋转不变的选项。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,但你能详细说明一下这实际上是什么 [.5 1 .5; 1 -6 1; .5 1 .5] 表示 ?
    • 我不知道该矩阵将如何影响图像,每个; 应该创建一行,我建议您检查这些链接:Matrices and Digital ImagesMatrix Filter RepresentationsMathWorks您甚至可以在其中运行代码。这是一个矩阵,第一行是.5 1 .5,第二行是1 -6 1,以此类推
    • 它看起来像是对 2D 拉普拉斯算子的修改——一个边缘检测器。见这里:homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm。顺便说一句,如果可以的话,请使用imfilterfilter2 不是为图片设计的。
    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2022-06-28
    相关资源
    最近更新 更多