You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB中查找黑白图像边界上的液滴起始点x坐标

MATLAB批量检测液滴接触点x坐标实现方案

以下是可落地的实现步骤,适配绝大多数水平承载台的液滴观测图像场景:

1. 批量读取图像并做预处理

  • 首先定位待处理图像文件夹,用dir函数批量读取所有图像路径:
    % 替换为你的图像文件夹路径
    img_dir = 'D:\droplet_images\';
    img_list = dir(fullfile(img_dir, '*.jpg'));
    % 初始化结果存储矩阵:列分别为文件名、左接触点x、右接触点x
    result = cell(length(img_list), 3);
    
  • 单张图像预处理:转灰度、去噪、对比度校正
    for i = 1:length(img_list)
        img = imread(fullfile(img_dir, img_list(i).name));
        if size(img,3) == 3
            img_gray = rgb2gray(img);
        else
            img_gray = img;
        end
        % 中值滤波去噪
        img_filter = medfilt2(img_gray, [3,3]);
        % 光照不均校正(可选,适用于明暗差异大的图像)
        img_adjust = imtophat(img_filter, strel('disk', 15));
    

2. 提取承载台基线

  • 用Canny算子检测边缘,霍夫变换提取最长水平直线作为基线:
    % 边缘检测
        edge_img = edge(img_adjust, 'canny', [0.2, 0.5]);
        % 霍夫变换找水平直线,限制角度范围避免识别到斜向干扰边
        [H, theta, rho] = hough(edge_img, 'Theta', -1:0.5:1);
        peaks = houghpeaks(H, 2);
        lines = houghlines(edge_img, theta, rho, peaks, 'FillGap', 20, 'MinLength', 100);
        % 取最长的线作为基线,记录基线y坐标
        [~, max_line_idx] = max([lines.point2(1) - lines.point1(1)]);
        base_y = lines(max_line_idx).point1(2);
    

3. 计算液滴接触点x坐标

  • 筛选液滴轮廓,找和基线y坐标匹配的左右端点:
    % 去除基线对应的边缘,仅保留液滴轮廓
        edge_img(base_y-2:base_y+2, :) = 0;
        droplet_region = bwconncomp(edge_img);
        [~, max_region_idx] = max(cellfun(@length, droplet_region.PixelIdxList));
        [droplet_y, droplet_x] = ind2sub(size(edge_img), droplet_region.PixelIdxList{max_region_idx});
        % 找距离基线误差在2像素内的液滴边缘点,取x的左右极值为接触点坐标
        y_diff = abs(droplet_y - base_y);
        contact_points_idx = find(y_diff <= 2);
        contact_x = droplet_x(contact_points_idx);
        left_x = min(contact_x);
        right_x = max(contact_x);
        % 存储结果
        result{i,1} = img_list(i).name;
        result{i,2} = left_x;
        result{i,3} = right_x;
    end
    
  • 最后导出结果到csv文件即可:writecell(result, 'droplet_contact_x.csv');

如果你的图像中承载台不是完全水平,可以在提取基线后计算基线倾斜角度,用imrotate校正图像后再做后续处理,精度更高。
如果液滴轮廓存在拖尾等异常,可以提前设定液滴的感兴趣区域(ROI),排除基线下方、液滴外的干扰区域,进一步降低误判概率


内容的提问来源于stack exchange,提问作者jesse voorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:45:05