【问题标题】:image restoration,CT scan,closed curve,图像修复,CT扫描,闭合曲线,
【发布时间】:2018-04-01 04:20:51
【问题描述】:

数字图像可能存在问题。 实际上,在我可以谷歌搜索之前,我不知道如何描述这个问题。 所以我在问一些科学领域的某种概念可以描述这个问题。

CT图像,断层扫描:

这是物理多孔材料的截面扫描,这是关于土木工程的。 图像的白色部分是实心的,而黑色部分是孔洞。 孔的横截面应为闭合曲线。 但是,由于某种技术原因,描述这些孔轮廓的像素的灰度级在我得到的位图中变为 0(黑色)。 如你所见,

绿色圈出的像素应该和红色的像素一样,灰度在0以上,因为这里应该是一个封闭的曲线来描述洞。

我想修复这些像素,但不知道这是什么问题。 有没有一些经典的算法可以解决这个问题?

【问题讨论】:

  • 那你是怎么计算图像的?
  • 这是原材料,我没有对这张图片做任何事情。
  • 如果有问题的像素值只是 0,我认为要求改进的原始图像比尝试修复它更好。如果将其用于人类治疗,您当然不会想要“修复”组织扫描,无论它多么聪明。
  • 其实这是关于土木工程的,无论如何,谢谢你的建议。
  • 我投票结束这个问题,因为它不是一个编程问题。

标签: image algorithm image-processing 2d


【解决方案1】:

您正在寻找的技术称为dilation。 opencv库中有一个例子erosion and dilation

【讨论】:

    【解决方案2】:

    是的,您可以使用 形态学运算符,例如 膨胀,但这会导致轮廓变得更厚,从而使孔变得更小,甚至如果太小,甚至会完全填满它们。

    另一种方法是找到小间隙。

    1. 创建 2 个辅助二维数组/图像

      它们将为输入图像的每个像素包含一个整数计数器。因此,如果您的图像具有xs,ys 的分辨率,那么您可以尝试以下操作:

      int cx[ys][xs]; // x direction counter
      int cy[ys][xs]; // y direction counter
      
    2. 计算cx

      所以cx[y][x] 应该在x 方向(行)中保存图像中后续零的计数。

      1. 清除cx[][]0
      2. for (y=0;y<ys;y++)
      3. 设置x=-1
      4. x 之后找到第一个零像素并将其命名为x0
      5. x0 中找到最后一个零像素并将其命名为x1
      6. 设置cx[y][x0..x1]=x1-x0+1x=x1+1
      7. 循环 #4x<xs

      类似地计算cy[y][x]y 方向(列)。

    3. 检测和修复缺失的轮廓

      如果min(cx[y][x],cy[y][x])<threshold 然后像素x,y 属于缺失轮廓并且应该设置为白色,这很容易...threshold 值是缺失轮廓的最大长度,并且必须小于最小孔尺寸。

    因此,孔必须大于缺少轮廓间隙。否则这是行不通的。您可以通过创建另一个保持黑色区域大小的map 来改进这一点。 (填充任何黑色像素,但使用填充像素数代替颜色,因此您需要应用填充填充 2 次,一次用于计数,一次用于填充)然后仅在大于小孔的区域上应用缺失的轮廓,以防止填充小孔.

    还有另一种可能性,例如检测消失的轮廓模式并将这种模式连接得太近。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-08
      • 2016-11-22
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2018-04-02
      相关资源
      最近更新 更多