2

我的问题是我有一个png格式的雷达图像。(抱歉,我不得不删除这张图片,因为我的同事说它侵犯了德国气象局的版权)

我想在 MATLAB 中读取图像。然后读取所有云,并用唯一索引标记每个云。这意味着属于某个云的每个像素都标有相同的索引i。计算area(coa)每个云的中心,然后我应该能够测量从一个 coa 到另一个云之间的距离。

我知道一些类似的工作是在 IDL 中完成的。我尝试使用它,但如果我能够在 MATLAB 中完成所有这些并更多地关注结果,而不是花时间学习 IDL,那对我来说会容易得多。

所以,在开始之前,我想知道这一切在 MATLAB 中是否可行。如果是,你能指导我如何提取云并标记它们吗?

4

3 回答 3

3

首先进行一些基本的图像分析,例如阈值化或中值滤波等,以减少相关的噪声。然后,您可以使用bwlabel唯一索引来标记每个云。用于reigonprops 查找质心。

这是一个非常基本的代码示例:

d=imread('u09q8.png');
bw = im2bw(d,0.1); % thereshold at 50%
bw = bwareaopen(bw, 10); % Remove objects smaller than 10 pixels from binary image
bw=bwlabel(bw); % label each cloud 
stats=regionprops(bw,'Centroid'); % find centroid coordinates of all labeled clouds
于 2013-01-22T09:58:53.193 回答
1

是的,有可能。关于云检测,这是一个循序渐进的过程。它将基于您要使用的算法。你可以从这里开始。

于 2013-01-22T09:56:43.853 回答
1

是的当然。这可以使用k-means 聚类来完成。您可以阅读有关imread和的信息kmeans。官方文档中给出的示例kmeans正是您所需要的。

例如,如果您想将您的图像聚类到 5 个云中:

%// Read the image
I = imread('clouds.png');
[y, x] = find(I);             %// Obtain all coordinates
y = size(I, 1) - y + 1;       %// Adjust y-coordinates
K = 5;
[idx, c] = kmeans([x, y], K); %// Classify clouds into K clusters

现在idx存储相应的簇索引并c存储质心的坐标。

要绘制结果,您可以执行以下操作:

%// Plot results
figure, hold on
scatter(x, y, 5, idx)         %// Plot the clusters
plot(c(:, 1), c(:, 2), 'r+')  %// Plot centroids
text(c(:, 1) + 10, c(:, 2), num2str((1:K)'), 'color', 'r')  %// Plot cluster IDs

请注意,此方法需要预先确定簇的数量K。或者,您可以使用此工具尝试自动检测集群的数量。

编辑:由于版权声明,我删除了生成的图像。

于 2013-01-22T09:58:39.460 回答