我想在我的图像中找到边缘,特别是从亮到暗的强度垂直变化。这可能吗?我正在OpenCV中使用Canny / Sobel边缘探测器,但是他们正在拾取强度增加的边缘,这是我不想要的。
答案 0 :(得分:0)
您可以编写自定义过滤器并使用cvFilter2D(2D卷积)。
举一个非常简单的例子,卷积核{1 0 -1; 1 0 -1; 1 0 -1}是一个3x3滤镜,可以突出从左到右的强度降低。您可以将结果阈值化以获得边缘。
您必须选择正确的内核大小以及正确的值,以适合您的图像。
Here是一个很好的链接,展示了如何使用cvFilter2d:
答案 1 :(得分:0)
一旦你理解了这些过滤器在数学上做了什么,很明显你需要改变什么。这必须在管道中。在他的回答中,Totoro已经指出你可以通过你自己的过滤器来运行。
Sobel边缘检测首先在图像上运行两个滤镜。这些滤镜在X和Y方向上给出图像的渐变。边缘和渐变的关联方式是,大幅度的渐变意味着图像有很多变化,这表明边缘!
因此,Sobel算法的下一步(iirc)是找到梯度的大小。最后,您可以对此进行阈值处理,仅将图像中的大变化视为边缘。最后,沿着边缘方向进行边缘细化和滞后阈值处理,但这不是很重要。
您希望与Sobel算法不同的重要步骤是您关心 direcction 的变化。如果从X和Y渐变(使用正弦和余弦)计算变化方向,则可以过滤出仅沿所需方向前进的边缘。
如果你只关心垂直变化,你可以运行一个卷积内核来计算沿水平方向的渐变并只取正值。所有正值都表明从浅到深有垂直变化。如果您愿意,您可以像索贝尔那样执行以下处理步骤。