MATLAB云模型船舶航路识别

img


这是某个水域的船舶航行轨迹密集图,MATLAB如何用云模型算法提取不同颜色对应的航线,最终提取出航线出来,例如可以通过设定阈值0到0.1,这样就可以提前出10条航路出来。

  • 加载船舶航行轨迹密集图:首先,将船舶航行轨迹密集图加载到MATLAB中。你可以使用imread函数加载图像文件,或者直接使用已加载的图像变量。
image = imread('航行轨迹图.jpg');


  • 转换为HSV颜色空间:将图像从RGB颜色空间转换为HSV颜色空间。HSV颜色空间对于颜色的描述更加直观,其中H表示色调,S表示饱和度,V表示亮度。
hsvImage = rgb2hsv(image);


  • 提取颜色区域:根据你想要提取的颜色范围,在HSV图像中创建一个二值掩码,将指定颜色区域设置为白色(1),其余区域设置为黑色(0)。你可以使用imbinarize函数结合阈值来创建二值掩码。
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));


  • 标记航线:使用bwlabel函数对清理后的二值掩码进行标记,将不同的航线分配不同的标签。
labeledImage = bwlabel(cleanMask);


可视化航线:使用label2rgb函数将标记的航线可视化,以便观察提取的航线。

rgbImage = label2rgb(labeledImage, 'jet', 'k', 'shuffle');
imshow(rgbImage);


  • 可选:提取指定数量的航线:如果你想提取指定数量的航线,可以使用regionprops函数计算每个航线的面积,并选择前n个面积最大的航线。这样就可以提取出指定数量的航线。
% 计算每个航线的面积
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);


通过以上步骤,你可以使用云模型算法从船舶航行轨迹密集图中提取指定颜色对应的航线,并根据阈值设定提取出指定数量的航线。你可以根据需要调整阈值范围和提取的航线数量,以获得最佳的结果。