我的问题是我有png
格式的雷达图像。 (抱歉,我不得不删除该图片,因为我的同事说它侵犯了德国气象局的版权)
我想在MATLAB中阅读图像。然后读取所有云,并使用唯一索引标记每个云。这意味着属于某个云的每个像素都标有相同的索引i
。计算每个云的area(coa)
的中心,然后我应该能够测量从一个coa到另一个coa的云之间的距离。
我所知道的一些类似工作是在IDL中完成的。我尝试使用它,但如果我能够在MATLAB中完成所有这些并且更多地关注结果,而不是花时间学习IDL,那对我来说会更容易。
所以,在进入之前,我想知道在MATLAB中是否所有这些都是可能的。如果是的话,您能否指导我如何提取云并标记它们?
答案 0 :(得分: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
答案 1 :(得分:1)
是的,这是可能的。 关于云检测,这是一个循序渐进的过程。 它将基于您将要使用的算法。您可以启动here.
答案 2 :(得分:1)
是的,当然。这可以使用k-means clustering完成。
您可以阅读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
。或者,您可以使用this tool尝试自动检测群集数量。
编辑:由于版权主张,我删除了生成的图片。