Path: news.mathworks.com!not-for-mail
From: "Sven" <sven.holcombe@gmail.deleteme.com>
Newsgroups: comp.soft-sys.matlab
Subject: Clustering a curve of 3d points
Date: Tue, 16 Jun 2009 20:57:02 +0000 (UTC)
Organization: University of Michigan
Lines: 129
Message-ID: <h190uu$i3l$1@fred.mathworks.com>
Reply-To: "Sven" <sven.holcombe@gmail.deleteme.com>
NNTP-Posting-Host: webapp-05-blr.mathworks.com
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: fred.mathworks.com 1245185822 18549 172.30.248.35 (16 Jun 2009 20:57:02 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Tue, 16 Jun 2009 20:57:02 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 1326470
Xref: news.mathworks.com comp.soft-sys.matlab:548090


Hi all,

I'm trying to group a set of points distributed in 3d space. The points come from a set of points that contain both true and false positives, and I'm trying to weed out the false positives.
The true positives should essentially describe a long curve through my space.

Can anyone help me describe the 'type' of problem I'm facing here, so I can search for the right keywords? Even better, some hints about how to work towards a solution would be great.

I've included the basic data below. Just copy the (n by 4) matrix below into a variable called 'found_pts', and then run the simple code snippet below it. You'll see a plot of my points, and at about mid-level (in Z), you'll see the long curve of true positives I'm trying to extract (as automatically as possible).
The first 3 columns simply give X, Y, and Z locations. The 4th column can be ignored for the moment.

Thanks,
Sven.

found_pts = []; % Copy from below

290       143      -700     0.565
290       142      -695     0.499
169       180      -690     0.429
255       174      -685     0.553
261       176      -680     0.538
216       150      -675     0.587
239       149      -670     0.582
289       149      -665     0.569
169       151      -660     0.576
180       183      -655     0.547
178       183      -650     0.618
156       146      -645      0.58
154       146      -640     0.638
151       146      -635     0.625
147       146      -630     0.661
144       144      -625     0.642
262       130      -620     0.678
263       129      -615     0.774
264       128      -610     0.647
264       127      -605     0.573
266       125      -600     0.658
267       125      -595     0.736
268       123      -590     0.763
268       122      -585     0.752
268       122      -580     0.729
269       120      -575     0.699
269       120      -570     0.708
270       121      -565     0.688
271       122      -560     0.635
201       117      -555     0.646
201       117      -550     0.654
201       116      -545     0.656
201       115      -540      0.66
200       114      -535     0.664
199       115      -530     0.639
198       115      -525     0.659
198       116      -520     0.637
226       173      -515     0.605
206       114      -510     0.592
203       112      -505     0.663
203       109      -500     0.657
248       162      -495     0.706
274       164      -490     0.709
274       165      -485     0.716
274       166      -480      0.73
198       108      -475     0.654
198       107      -470      0.67
198       106      -465     0.659
199       104      -460     0.665
200       103      -455     0.662
201       102      -450     0.626
200       104      -445     0.619
255       188      -440     0.595
244       123      -435     0.565
200       102      -430     0.563
195       166      -425     0.572
195       167      -420     0.618
198      97.2      -415     0.619
122       142      -410     0.655
264       177      -405     0.649
245       115      -400     0.664
248       115      -395     0.688
195      95.8      -390     0.666
195      94.3      -385     0.668
195      92.1      -380     0.639
193      91.4      -375     0.673
145       123      -370     0.677
192      87.8      -365     0.641
194      87.1      -360     0.652
193      87.8      -355     0.633
195      86.4      -350     0.642
195      84.9      -345      0.63
195      83.5      -340     0.673
194        82      -335     0.656
193      81.3      -330     0.665
193      81.3      -325     0.682
193      81.3      -320     0.734
193        82      -315      0.71
231       156      -310     0.512
241      89.2      -305     0.505
237      89.2      -300     0.604
233      88.5      -295     0.615
230      89.2      -290     0.617
227      89.2      -285     0.573
224      88.5      -280     0.534
216        90      -275     0.467
265      86.4      -270     0.555
190      92.9      -265     0.601
155      93.6      -260     0.565
262      87.1      -255     0.577
262      87.1      -250     0.607
263      87.1      -245     0.553
147       165      -240     0.522
156        95      -235     0.557
163      96.5      -230     0.592
214      92.9      -228     0.559
213      93.6      -226      0.54
213      93.6      -225     0.516
247      91.4      -224     0.546
245      91.4      -223     0.528
237      92.1      -221     0.556

numcols = 15;
cols = jet(numcols);
hist_edges = linspace(min(found_pts(:,4)), max(found_pts(:,4)), numcols);
[N, n_bin] = histc(found_pts(:,4), hist_edges);
bin_size = mean(diff(X))/2;
figure, hold on
for i=1:numcols-1
    idxs = n_bin==i;
    plot3(found_pts(idxs,1), found_pts(idxs,2), found_pts(idxs,3),'.','Color',cols(i,:))
end
axis tight, view(3)
colorbar, caxis(hist_edges([1 end]))