[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Removing stray clusters of points
- Subject: Removing stray clusters of points
- From: Todd Clements <mole6e23(at)hotmail.com>
- Date: Fri, 01 Jun 2001 14:52:03 -0700
- Newsgroups: comp.lang.idl-pvwave
- Organization: UCSD
- User-Agent: MT-NewsWatcher/3.1 (PPC)
- Xref: news.doit.wisc.edu comp.lang.idl-pvwave:25189
Hi all again...
Thanks again Craig for your response on the ellipse fitting, it does
most of what I need. However, because our images are so broad, the edge
detection method you suggested doesn't work. The roberts() and sobel()
routines DO enhance the edge, but not quite enough, and they leave some
stray pixel clusters.
So, what I did instead was write an algorithm that simply finds the
literal edge of the image (after edge enhancement) coming from the left
and right. This gives me a rough outline of a circle that I can use the
ellipse fitting program. This works well except sometimes there are a
few sets of stray pixels clusters that interfere with finding the edge
of the image. I'd love to be able to remove these stray clusters.
I found the sigma_filter function in one of the on-line libraries, but
it doesn't seem to quite work no matter what box size or sigma I use.
So, right now what I've done is the following. I look for small boxes
inside large boxes where there are no additional pixels around the small
box. This does what I want, but is slow. As you can see from the code,
these are really isolated patches, which should be easier to get rid of!
;; znew is the image data
s = size( znew, /dimensions )
newSum = fltarr( s, s )
newSum1 = fltarr( s, s )
bs = 8
for i=-ss, ss do for j=-ss,ss do newSum1 = newSum1 + shift( znew, i, j )
for i=-bs, bs do for j=-bs,bs do newSum = newSum + shift( znew, i, j )
junk = where( newsum1 eq newSum )
if( junk ne -1 ) then $
znew[junk] = 0
znew is usually 512x512, but this is still a fairly slow process, and
I'm sure there's a better way of doing it. I don't have to worry about
edges of the array, since there is generally no data near our array
Any thoughts regarding the problem (or just general life philosophy =)