受光照影响的边缘检测
Edge detection affected by light illumination
我有这张灰度原始图像:
我想检测物体的边缘。但是,它会受到边缘附近光照的影响。这是我经过高斯模糊和Canny边缘检测后得到的:
这是我的代码:
cv::cvtColor(imgOriginal, imgGrayscale, CV_BGR2GRAY); // convert to grayscale
cv::GaussianBlur(crop, // input image
imgBlurred, // output image
cv::Size(5, 5), // smoothing window width and height in pixels
5); // sigma value, determines how much the image will be blurred
cv::Canny(imgBlurred, // input image
imgCanny, // output image
0, // low threshold
100); // high threshold
光源在物体下方。物体边缘的照明来自光源或光的反射。他们总是在同一个地方。
照明也被检测为边缘。我已经尝试了其他几种方法,例如使用 示例代码 连接组件标记和二值化图像(这里是初学者)但是有用。有什么方法可以检测干净的边缘照明吗?
要彻底解决这个问题是不可能的。边缘检测器可以检测到的是由于对象中的边缘而导致的强度变化。鉴于你那里的照明,由照明引起的变化非常突出。
我会建议两种方法来解决这个问题:
调整灯光,如果可以的话
获得正确的照明可以解决任何计算机视觉问题的 50%。
使用您对图像、背景或灯光的任何了解来去除不必要的边缘。如果相机是静止的,背景减法可以去除背景产生的边缘。如果你知道物体的形状、颜色等,你可以去除与物体不太吻合的边缘。如果很难确定物体的确切属性,您还可以用很多照片训练机器学习系统来分割图像。
使用具有相当大内核的 erosion 可以移除背景光块,因为对象比光块大得多
您可以尝试的另一种常用技术是使用 distance transform + watershed。距离变换很可能 return 点 你确定在对象内部(因为对象有小的暗区)。 Watershed 将尝试找到与确认的 点 相连(通过比较梯度)的区域。如果距离变换给出对象内部的多个点,您可能需要在分水岭后合并多个区域。
我有这张灰度原始图像:
我想检测物体的边缘。但是,它会受到边缘附近光照的影响。这是我经过高斯模糊和Canny边缘检测后得到的:
这是我的代码:
cv::cvtColor(imgOriginal, imgGrayscale, CV_BGR2GRAY); // convert to grayscale
cv::GaussianBlur(crop, // input image
imgBlurred, // output image
cv::Size(5, 5), // smoothing window width and height in pixels
5); // sigma value, determines how much the image will be blurred
cv::Canny(imgBlurred, // input image
imgCanny, // output image
0, // low threshold
100); // high threshold
光源在物体下方。物体边缘的照明来自光源或光的反射。他们总是在同一个地方。
照明也被检测为边缘。我已经尝试了其他几种方法,例如使用 示例代码 连接组件标记和二值化图像(这里是初学者)但是有用。有什么方法可以检测干净的边缘照明吗?
要彻底解决这个问题是不可能的。边缘检测器可以检测到的是由于对象中的边缘而导致的强度变化。鉴于你那里的照明,由照明引起的变化非常突出。
我会建议两种方法来解决这个问题:
调整灯光,如果可以的话 获得正确的照明可以解决任何计算机视觉问题的 50%。
使用您对图像、背景或灯光的任何了解来去除不必要的边缘。如果相机是静止的,背景减法可以去除背景产生的边缘。如果你知道物体的形状、颜色等,你可以去除与物体不太吻合的边缘。如果很难确定物体的确切属性,您还可以用很多照片训练机器学习系统来分割图像。
使用具有相当大内核的 erosion 可以移除背景光块,因为对象比光块大得多
您可以尝试的另一种常用技术是使用 distance transform + watershed。距离变换很可能 return 点 你确定在对象内部(因为对象有小的暗区)。 Watershed 将尝试找到与确认的 点 相连(通过比较梯度)的区域。如果距离变换给出对象内部的多个点,您可能需要在分水岭后合并多个区域。