image = imread('航行轨迹图.jpg');
hsvImage = rgb2hsv(image);
hueThreshold = [0 0.1]; % 设置色调阈值范围
saturationThreshold = [0 1]; % 设置饱和度阈值范围
valueThreshold = [0 1]; % 设置亮度阈值范围
hueMask = (hsvImage(:,:,1) >= hueThreshold(1)) & (hsvImage(:,:,1) <= hueThreshold(2));
saturationMask = (hsvImage(:,:,2) >= saturationThreshold(1)) & (hsvImage(:,:,2) <= saturationThreshold(2));
valueMask = (hsvImage(:,:,3) >= valueThreshold(1)) & (hsvImage(:,:,3) <= valueThreshold(2));
colorMask = hueMask & saturationMask & valueMask;
cleanMask = imclose(colorMask, strel('disk', 3));
labeledImage = bwlabel(cleanMask);
可视化航线:使用label2rgb函数将标记的航线可视化,以便观察提取的航线。
rgbImage = label2rgb(labeledImage, 'jet', 'k', 'shuffle');
imshow(rgbImage);
% 计算每个航线的面积
props = regionprops(labeledImage, 'Area');
areas = [props.Area];
% 根据航线面积降序排序
[sortedAreas, idx] = sort(areas, 'descend');
% 指定要提取的航线数量
numLines = 10;
% 提取前n个面积最大的航线
selectedLines = ismember(labeledImage, idx(1:numLines));
% 可视化提取的航线
selectedImage = label2rgb(selectedLines, 'jet', 'k', 'shuffle');
imshow(selectedImage);
通过以上步骤,你可以使用云模型算法从船舶航行轨迹密集图中提取指定颜色对应的航线,并根据阈值设定提取出指定数量的航线。你可以根据需要调整阈值范围和提取的航线数量,以获得最佳的结果。