一、在使用此程序之前,您需要将图像文件(假设命名为 your_image.jpg
)与 MATLAB 程序文件放在同一个文件夹中。然后,将程序中的 your_image.jpg
替换为您自己的图像文件名。运行程序后,它将显示原始图像,并在图像上绘制出每个轮廓的质心坐标。
% 读取图片
image = imread('your_image.jpg'); % 替换为你的图片路径
% 转换为灰度图像
grayImage = rgb2gray(image);
% 二值化处理
binaryImage = imbinarize(grayImage);
% 提取轮廓
contourImage = bwperim(binaryImage);
% 标记轮廓
labeledImage = bwlabel(contourImage);
% 计算轮廓质心坐标
measurements = regionprops(labeledImage, 'Centroid');
centroids = cat(1, measurements.Centroid);
% 在图片上显示质心坐标
imshow(image);
hold on;
plot(centroids(:, 1), centroids(:, 2), 'r*');
hold off;
% 输出质心坐标
disp('质心坐标:');
disp(centroids);
-
读取图像:程序通过
imread
函数读取图像文件,将其加载到内存中。 -
灰度处理:为了简化处理过程,将彩色图像转换为灰度图像,使用
rgb2gray
函数将彩色图像转换为灰度图像。 -
二值化处理:通过使用
graythresh
函数来自动选择一个阈值,然后使用imbinarize
函数将灰度图像二值化,将图像转换为黑白二值图像。这一步的目的是将图像分为目标物体和背景两部分。 -
寻找轮廓:使用
bwlabel
函数对二值化图像进行连通组件标记,为每个连通组件分配一个唯一的标签。然后,通过使用regionprops
函数提取每个连通组件的属性,其中包括质心坐标。这样,我们可以获取图像中每个轮廓的质心坐标。 -
显示图像和轮廓:使用
imshow
函数显示原始图像。然后,通过使用hold on
和hold off
函数,确保在同一图像上绘制轮廓质心坐标时不清除原始图像。使用plot
函数绘制每个轮廓的质心坐标,并使用红色十字标记进行标注。
二、一步提取轮廓,可以使用 MATLAB 中的函数 bwboundaries
。该函数可以从二值化图像中提取出每个连通组件的边界轮廓。
% 读取图像
image = imread('your_image.jpg');
% 转换为灰度图像
grayImage = rgb2gray(image);
% 二值化处理
threshold = graythresh(grayImage);
binaryImage = imbinarize(grayImage, threshold);
% 提取轮廓
boundaries = bwboundaries(binaryImage);
% 显示图像
imshow(image);
hold on;
% 绘制轮廓
for k = 1:length(boundaries)
boundary = boundaries{k};
plot(boundary(:, 2), boundary(:, 1), 'r', 'LineWidth', 2);
end
hold off;
在修改后的程序中,我们使用 bwboundaries
函数来提取二值化图像中的轮廓边界。返回的 boundaries
是一个细胞数组,每个元素表示一个轮廓的边界。然后,我们使用 plot
函数将每个轮廓边界绘制在原始图像上。
请确保将图像文件(假设命名为 your_image.jpg
)与 MATLAB 程序文件放在同一个文件夹中,并替换程序中的 your_image.jpg
为您自己的图像文件名。