2013-01-22 78 views
2

我的问题是,我有一个png格式的雷达图像。 (对不起,但我不得不删除图像,因为我的同事说它侵犯了德国气象局的版权)图像标记和在matlab中找到质心

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

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

所以,在跳入之前,我想知道这些在MATLAB中是否可行。如果是的话,你能指导我一点关于如何提取云并标记它们吗?

+0

哪里是像云? –

+0

@AbidRahmanK - 你在图片中看到的只有云。 – Vikram

+0

哦,对不起。我脑中有一幅完全不同的云彩图片:)。无论如何尝试这个链接:http://blogs.mathworks.com/steve/2006/06/02/cell-segmentation/ –

回答

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 
+0

是的,我想通过股权进行清理。我认为regionprops可以进一步提供很多帮助,考虑到它可以做的事情。非常感谢。 – Vikram

+0

哇谢谢..你还可以告诉我如何可以看到最终的图像与阈值,如果可能的标签在每个云标签。 – Vikram

+0

你可以使用'imagesc(bw)'。这会根据颜色映射将每个标签颜色编码为不同的颜色(默认为'jet')。 – bla

1

是的,这是可能的。 关于云检测,它是一步一步的过程。 它将基于您要使用的算法。你可以开始here.

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尝试自动检测群集数量。

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

+1

谢谢。我现在在上面。 – Vikram

+0

@Vikram我为了您的方便添加了一个示例。 –

+0

谢谢Eitan。但是通过这种方式,它只是将云计算领域划分为群(云群),而我想要的是将每个单独的云(不与任何其他云联系)分开。 – Vikram