% 读取图像 I = imread('example.png'); % 用你自己的图像路径替换
% 将图像转换为灰度图像(如果它是彩色的)
Igray = rgb2gray(I);
% 对图像进行平滑处理
Iblur = imgaussfilt(Igray, 2); % 高斯滤波器
% 计算图像梯度
[~, threshold] = edge(Iblur, 'canny');
BWs = edge(Iblur, 'canny', threshold * 0.5); % 使用 Canny 边缘检测
% 进行分水岭变换
D = -bwdist(~BWs);
% 计算距离变换并取负值
D(~BWs) = -Inf; % 将非边缘区域设置为负无穷大
% 进行分水岭变换
L = watershed(D);
% 将结果标记在图像上
Ilabel = label2rgb(L, 'hsv', 'k', 'shuffle');
% 显示结果
figure;
subplot(1, 3, 1) i imshow(Igray); title('Original Grayscale Image');
subplot(1, 3, 2) imshow(BWs); title('Edges Detected');
subplot(1, 3, 3); imshow(Ilabel); title('Watershed Transform Result');