Matlab 噪声图像中直线伪影的检测

Matlab 噪声图像中直线伪影的检测,matlab,image-processing,tomography-reconstruction,Matlab,Image Processing,Tomography Reconstruction,我在做计算机断层扫描投影图像的图像处理。有一种特定类型的伪影是我正在处理的结果,它表现为贯穿整个图像的垂直线: 我现在通过比较每列的平均值来检测它。如果平均值小于左侧和右侧列邻居平均值的一半,则该列被视为线伪影。然后将其插值为左侧和右侧相邻像素的最大值 插值效果很好(图像的右侧),但检测过于随意。它也经常失败,因为许多只包含黑色背景的列由于明显的严重泊松噪声可以满足该条件。这会在过滤噪声时产生伪影,这是下一个阶段。我使用BM3D效果很好,不希望对整个图像进行中值滤波 你能想出更好的方法来检测这

我在做计算机断层扫描投影图像的图像处理。有一种特定类型的伪影是我正在处理的结果,它表现为贯穿整个图像的垂直线:

我现在通过比较每列的平均值来检测它。如果平均值小于左侧和右侧列邻居平均值的一半,则该列被视为线伪影。然后将其插值为左侧和右侧相邻像素的最大值

插值效果很好(图像的右侧),但检测过于随意。它也经常失败,因为许多只包含黑色背景的列由于明显的严重泊松噪声可以满足该条件。这会在过滤噪声时产生伪影,这是下一个阶段。我使用BM3D效果很好,不希望对整个图像进行中值滤波

你能想出更好的方法来检测这些“线伪影”吗?请注意图像中对象的强边界和伪影中也包含的强噪声

  • 我们想在图像中找到垂直线,所以首先用滤波器卷积图像[1-21]。这将为低于垂直相邻像素的像素提供高值
  • 对图像的所有列求和
  • 查找具有最大值的列的索引。这个专栏是有问题的
    啊,那些探测器阵列坏了。。。。在CT中如此常见!由于这些图像是CT,我相信误差总是垂直线。你试过垂直边缘检测过滤器吗?类似于
    conv2(img,[-1001])
    ?这将在黑线旁边创建两条垂直白线。这些可能更容易处理。还有,很抱歉再次这么说:迭代算法可能有助于减少重建中这些行的影响当然,我同意!我也看到了类似光束硬化的行为,尽管我有一个光谱模型,我有一些NLPV问题。所以我也在研究不同的重建技术。但一次只能解决一个问题。垂直过滤器是一个很好的开始,我正在编辑这个问题。线条是纯黑的(由于缺少数据),还是上面也有噪音?一般来说,它需要计算列上的梯度,收集行上的梯度(其大小),然后对峰值设置阈值?也许在像安德建议的那样运行边缘检测过滤器之后?@Florian他们会有价值的。放大图像,“求和所有列”,你是说求和所有行?不,我是说列。在第一步之后,垂直线上的像素将具有较高的值,因此垂直方向上所有这些值的总和(柱)将给出较高的值。好吧,我误解了。对所有列求和听起来像是对所有列进行求和(即对列索引进行求和)。您的意思是:对于每一列,对该列的所有条目求和(即对行求和)。对我来说有点模棱两可,但也许那只是我。这很有效。可能存在0到N个工件。幸运的是,伪影列的平均值要高出几个数量级,因此可以在3中检测伪影的数量。这很容易。