图像恢复,CT扫描,闭合曲线,

时间:2017-10-20 02:34:05

标签: image algorithm image-processing 2d

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

CT图像,剖面扫描: img

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

part2

以绿色圈出的像素应该像红色那些灰度等级大于0的像素,因为这里应该是一条闭合曲线来描述这个洞。

我想修复这些像素,但不知道这个问题是什么类型。 这个问题有一些经典的算法吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

是的,您可以使用扩展之类的形态运算符,但这会导致更粗的轮廓,使孔变小或甚至填充它们,如果太小。

另一种方法是找到小的差距。

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

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

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

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

    1. 使用cx[][]
    2. 清除0
    3. for (y=0;y<ys;y++)
    4. 设置x=-1
    5. x之后找到第一个零像素并将其称为x0
    6. 找到x0的最后一个零像素并将其称为x1
    7. 设置cx[y][x0..x1]=x1-x0+1x=x1+1
    8. 循环#4 ,而x<xs
    9. 同样为cy[y][x]方向(列)计算y

    10. 检测并修复缺失的轮廓

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

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

      还有另外一种可能性,例如检测消失的轮廓图案并加入太近的图案。