彩色图像的边缘检测

信息处理 图像处理 计算机视觉 边缘检测
2022-02-01 00:52:24

我了解在灰度图像中使用 Sobel 内核进行边缘检测的过程。输入是灰度图像,输出是灰度图像。但是,我在弄清楚如何将 Sobel 内核应用于彩色图像时遇到了麻烦。

我是否找到每个颜色通道(R、G 和 B)的颜色渐变,然后平均每个值以获得最终的颜色渐变值?还是我平均颜色通道然后找到该图像的颜色渐变?

我的目标是渲染光线追踪图像,找到边缘,然后仅使用抗锯齿重新渲染高对比度区域,并单独保留低对比度区域。

2个回答

在彩色图像中寻找边缘可以通过将图像分解为其通道,分别找到渐变并以某种方式融合它们来完成。但是,这种方法没有将颜色分量合并到联合模型中。幸运的是,有一种更好的方法可以做到这一点,那就是结构张量表示。

颜色结构张量描述了图像中某一点的二维一阶微分结构。它由以下人员指定:

S=[Rx2+Gx2+Bx2RxRy+GxGy+BxByRxRy+GxGy+BxByRy2+Gy2+By2]

其中下标表示偏导数。这是对局部梯度的更精确描述。然后将特征分解应用于结构张量矩阵以形成特征值和特征向量。较大的特征值表示局部图像边缘的强度(梯度幅度)和跨边缘的相应特征向量点(在梯度方向上)。换句话说,特征值编码梯度幅度,而特征向量包含梯度方向信息。请注意,特征向量和特征值可以针对结构张量进行解析计算。S

结构张量还有很多其他用例,所以很高兴知道。最后但同样重要的是,这是一个 MATLAB 代码,它使用此信息来计算梯度:

http://www.mathworks.com/matlabcentral/fileexchange/28114-fast-edges-of-a-color-image-actual-color-not-converting-to-grayscale/content/coloredges.m

获得梯度后,您可以进一步以标准方式(canny 等)进行边缘检测。

是的,您可以为每种颜色使用索贝尔渐变。如果您对使用其他方法进行边缘检测感到满意,请尝试以下操作:

1-明确指定您想要获得的颜色。说红色。纯红色将是这样的 [1,0,0]。如果您遵循 RGB 模型/颜色系统。其中: 第一个值:表示它有多红。第二个值:表示它的绿色程度。第三个值:表示它有多蓝。

现在,如果您知道想要的确切颜色,请说 [0.85,0.2,0.17]。那也会好的。

2- 指定范围。这取决于用户来选择,主要是通过反复试验来完成,他/她会得到确切想要的颜色。

如果你的颜色是 [0.85,0.2,0.17]。假设您的红色范围是 [0.9 到 0.8]。假设您的红色范围是 [0.25 到 0.15]。假设您的红色范围是 [0.22 到 0.12]。

3- 现在您可以轻松地执行 for 循环来搜索感兴趣的区域。

循环算法将是 - 搜索落入指定区域的红色值,如果找到,则搜索绿色像素值是否落入指定区域,如果找到,则最后搜索蓝色。

现在您确实意识到了边缘的位置,您可以轻松地操纵和更改它们的颜色以用于任何不同的目的。

对于大图像来说,这是一个简单的有点长的技术,但很容易理解。