图像标注和在matlab中查找质心

时间:2013-01-22 09:50:59

标签: matlab image-processing

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

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

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

所以,在进入之前,我想知道在MATLAB中是否所有这些都是可能的。如果是的话,您能否指导我如何提取云并标记它们?

3 个答案:

答案 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完成。 您可以阅读imreadkmeanskmeans官方文档中给出的示例可以准确显示您的需求。

例如,如果您想将图像聚类为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尝试自动检测群集数量。

编辑:由于版权主张,我删除了生成的图片。