Browse Source

补充说明

w 1 tháng trước cách đây
mục cha
commit
2f522c586c
2 tập tin đã thay đổi với 11 bổ sung20 xóa
  1. 6 17
      README
  2. 5 3
      src/FeedLevelDetector.cpp

+ 6 - 17
README

@@ -1,37 +1,26 @@
+实现目标:通过单目视觉测量饲料表面与图像顶部的垂直距离
+实现思路:图像处理,边缘检测,表面定位(取最高点),计算距离,结果可视化
+输入参数:图像
+输出参数:可视化图像以及与图像顶部的距离(像素点),可根据实际距离计算转化比例输出实际高度
+注意:不同图像因边缘梯度不同,需修改Canny检测的输入参数(可参考下述Canny边缘检测的理论解释进行调整)
 高斯模糊去噪:G(x,y) = (1/(2πσ²)) * e^(-(x²+y²)/(2σ²))
     选择高斯核大小:通常使用奇数尺寸的核(如3*3, 5*5等)
-
     计算高斯权重:根据σ值计算核中每个位置的权重
-
     归一化权重:使所有权重之和为1
-
     卷积运算:将高斯核与图像进行卷积
-
     对于轻度噪声:σ=0.5-1.5,核大小3*3或5*5
-
     对于较强噪声:σ=1.5-3.0,核大小5*5或7*7
-
 Canny边缘检测:一种经典的图像边缘提取算法
         使用Sobel算子计算图像的梯度:
-
         水平梯度Gx = Sobel_x * 图像
-
         垂直梯度Gy = Sobel_y * 图像
-
     梯度幅度:G = √(Gx² + Gy²)
-
     梯度方向:θ = arctan(Gy/Gx),量化到0°、45°、90°、135°四个方向
-
-    双阈值检测
-
+    双阈值检测:
     设定高阈值(Thigh)和低阈值(Tlow),通常Tlow ≈ 0.4*Thigh
-
     梯度值 > Thigh:强边缘像素
-
     Tlow < 梯度值 ≤ Thigh:弱边缘像素
-
     梯度值 ≤ Tlow:抑制
-
 cv::findContours函数:OpenCV 中用于从二值图像中提取轮廓的函数,通常与边缘检测(如 Canny)或阈值处理的结果配合使用
     输入参数:Canny函数的输出,mode 轮廓检索模式,method:轮廓近似方法
         mode:轮廓检索模式

+ 5 - 3
src/FeedLevelDetector.cpp

@@ -27,7 +27,7 @@ float FeedLevelDetector::findFeedSurface(const cv::Mat& image) {
     
     float minY = image.rows; // 初始设置为图像高度
     
-    // 查找所有轮廓中的最高点
+    // 查找所有轮廓中的最高点(距离顶部最近的点)
     for (const auto& contour : contours) {
         for (const auto& point : contour) {
             if (point.y < minY) {
@@ -50,7 +50,7 @@ void FeedLevelDetector::displayResult(cv::Mat& image, float distance) {
              cv::Point(image.cols-1, distance), 
              cv::Scalar(0, 0, 255), 2);
     
-    // 显示距离信息
+    // 显示距离信息(图像坐标系原点在左上角)
     std::string distanceText = "Distance: " + std::to_string(distance) + " pixels";
     cv::putText(image, distanceText, cv::Point(20, 30), 
                 cv::FONT_HERSHEY_SIMPLEX, 0.8, cv::Scalar(0, 255, 0), 2);
@@ -78,4 +78,6 @@ float FeedLevelDetector::detectFeedLevel(const std::string& imagePath) {
     displayResult(image, distance);
     
     return distance;
-}
+}
+
+