65.9K
CodeProject 正在变化。 阅读更多。
Home

使用梯度法的图像分割

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.10/5 (16投票s)

2004年12月14日

2分钟阅读

viewsIcon

90472

downloadIcon

12232

使用图像分割自动检测相机镜头中的污渍

Sample Image - dimimg.jpg

引言

这是一种纯图像处理技术,用于自动检测瑕疵或污渍(无论你如何称呼它)。它是一种边缘检测方法,称为梯度方法。这是一种图像分割类型,首先对图像应用高斯低通滤波器,得到平滑后的图像。然后,使用两个掩码(水平和垂直掩码)对图像进行卷积,得到图像的水平和垂直梯度值。为了找到梯度值的幅值,我们需要对水平值和垂直值进行平方,并找到组合值的平方根。这给出了图像的梯度值。图像中最高的梯度值落在瑕疵或污渍的边缘。我们可以在那里放置一个箭头来识别瑕疵。该技术完全位于图像的空间域中。

这段代码有一些错误。这些错误不会严重影响代码的实际概念。错误如下:

  1. 1. 图像背景是青色。实际上,如果你使用 ULTRAEDIT 等编辑器查看第 94 字节后的 6 个值,你会发现 0x0D、0x0A、0x0D、0x0A、0x0D、0x0A。如果你删除这三个 0x0D,你就可以找到纯 8 位灰度图像。这个错误可能是由于 `unsigned char` 的类型转换问题造成的。
  2. 它无法检测图像中的多个瑕疵。
  3. 由于没有进行阈值处理,该算法也会在没有瑕疵的图像中放置箭头。我注释了代码中阈值处理的部分,你可以在第 255 行看到。阈值大约在 1.000 以上。这部分留给用户自行决定。

我正在尝试在程序的第二个版本中克服上述错误。

© . All rights reserved.