TESS Field Study SCC313: Asteroid Detection Improvements and Matching Solved
This is another investigation of full frame TESS images like the preliminary study I published last month. I think I'm going to call these Field Studies going forward. The SCC designation refers to the TESS Sector, Camera and CCD that I'm looking at (in this case 3,1,3). So with those definitions out of the way, let's get into the investigation. I will remind you to go wide with your (ideally non-mobile) browser to see the detail better. There are more technical details below the image sets.

1. This is an animation of 5 stacked TESS frames from October 10th to 14th 2018 that have been brightness matched. With the preliminary study I chose frames that I could actually see object movement in, but I see nothing moving here. It doesn't even look like an animation aside from the frame counter in the lower right. Still, these observations are close to the ecliptic so we should expect to find a lot of asteroids.

2. This is the static sky template. It's calculated as a pixel-wise trimmed max of 10 frames which include the 5 frames of image set 1.

3. These are the difference frames generated by a pixel-wise subtraction of the static sky template (img 2) from each frame of image set 1. Unlike previous studies, I have not thresholded the difference images. More on this below. Click and hold the image set above for the streaks view.

4. And finally these are the same difference image frames from image set 3 with known asteroid position matches for frame 4 plotted. Said another way, each of those circles with a dot inside of them for frame 4 is a verified asteroid. There are 172 circled detections matched to asteroids. I think I've really nailed the matching process now. You can see each of these matches is hitting the dead center of the JPL expected position circle. The magnitude of the matches is as follows: 13, 14, 15, 16, 17, 18. Click and hold the image set above for the streaks view.
Image set technical details:
Image set 1: Each frame here is a pixel-wise maximum of 3 sequential observations spanning one hour on the date of the observation. The frames are available for download here. My knowledge of CCDs is limited, but I know that the distribution of values coming out of the full frame images have some crazy outliers (even before the max-ing). So new for this analysis I have clipped the low and high end of the images at the 2% and 98% percentile values respectively. This helps keep the difference image ranges well behaved. These frames are then brightness matched to a pixel-wise median of the 10 original images as usual. Brightness matching continues to be a useful tool for normalizing the frames before creating the template and differencing them. I'm only showing 5 of the 10 frames in this presentation.
Image 2: The static sky template is generated as a trimmed maximum of the 10 processed frames mentioned above. The trim removes the highest value at each pixel location in the stack of 10 processed images.
Image set 3: First let me suggest again that you do not miss the streaks view for a composite cumulative representation of the difference images. These frames are just a simple pixel-wise subtraction of image 2 from image set 1 frames. Because of the processing described in image set 1 I'm getting much better range consistency in the differences. I haven't even thresholded these images like I've always done in the past; you're looking at the raw differences. I calculated the differences for all 10 frames but selected the 5 shown in this analysis by choosing the difference images with the most consistent amount of source counts.
Image set 4: Potential matches are selected by thresholding the difference images at 1σ. The circles correspond to known asteroid positions on the date and time of the 4th frame. I was able to match 172 out of 572 known objects (30%) brighter than 19th magnitude with a position error limit of 1px. As a sanity check I tried to match the frame 4 objects to frame 3 and frame 5 sources and there were zero matches as expected.
Matching image source detections to real physical objects was dramatically improved for this analysis. In fact I would consider it solved now. I was doing a number of things wrong in the preliminary study including: using a geocentric frame, using apparent coordinates and making incorrect assumptions about the WCS behavior for the TESS border/buffer pixels. Some of the effects of those choices I was aware of but underestimated, others I was just totally ignorant about. I'm now using JPL's ISPY tool to get object positions from a TESS centered frame and am getting average position error deltas of less than 1/10th of a pixel. A big thanks goes out to Jon Giorgini at JPL's Solar System Dynamics group who pointed me away from the SB Ident tool and towards the lesser known ISPY tool. He also updated the TESS orbit for me which I'm sure contributes to the excellent precision I'm getting here.
One interesting challenge I ran into is that I was having trouble matching one of the obvious brighter objects. This is because brighter objects create larger blobs. The centroid of a large blob might not actually be within the 1px limit of the expected position for the object yet the object blob as whole could still contain the expected object position. To handle this I tested contiguous blob pixels for matching as well. As long as the pixels were joined to the centroid of the object I considered them a candidate for matching. That seemed to do the trick.
Matched detections:
Object ID | Name | Visual Magnitude |
---|---|---|
2001236 | Thais | 13.6 |
2001048 | Feodosia | 14.2 |
2001078 | Mentha | 14.8 |
2003177 | Chillicothe | 14.8 |
2001364 | Safara | 15.0 |
2002138 | Swissair | 15.2 |
2021414 | Blumenthal | 15.4 |
2005140 | Kida | 15.5 |
2003669 | Vertinskij | 15.7 |
2005134 | Ebilson | 15.7 |
2004504 | Jenkinson | 15.9 |
2025888 | (2000 UW109) | 16.0 |
2004730 | Xingmingzhou | 16.0 |
2005420 | Jancis | 16.0 |
2034546 | (2000 SG234) | 16.1 |
2009601 | (1991 UE3) | 16.1 |
2011221 | (1999 JO26) | 16.2 |
2005644 | Maureenbell | 16.2 |
2029153 | (1988 SY2) | 16.2 |
2004106 | Nada | 16.2 |
2029741 | (1999 BM10) | 16.3 |
2075734 | (2000 AF139) | 16.3 |
2009771 | (1993 FU17) | 16.3 |
2013581 | (1993 QX4) | 16.3 |
2014653 | (1998 YV11) | 16.3 |
2015638 | (2000 JA65) | 16.3 |
2061546 | (2000 QT65) | 16.4 |
2022975 | (1999 VR23) | 16.4 |
2029489 | (1997 WQ) | 16.4 |
2018627 | Rogerbonnet | 16.4 |
2013802 | (1998 WR3) | 16.4 |
2012588 | (1999 RR98) | 16.5 |
2027743 | (1990 VM) | 16.5 |
2005382 | McKay | 16.5 |
2017136 | (1999 JE82) | 16.5 |
2004830 | Thomascooley | 16.5 |
2032804 | (1990 SO2) | 16.6 |
2119395 | (2001 TC40) | 16.6 |
2057110 | (2001 OV79) | 16.6 |
2067914 | (2000 WJ104) | 16.7 |
2009868 | (1991 VP1) | 16.7 |
2058668 | (1997 YJ3) | 16.7 |
2032132 | Andrewamini | 16.7 |
2023598 | (1995 WL13) | 16.7 |
2087564 | (2000 RQ9) | 16.8 |
2041909 | (2000 WO141) | 16.8 |
2006845 | Mansurova | 16.8 |
2025459 | (1999 XL14) | 16.8 |
2006867 | Kuwano | 16.8 |
2026980 | (1997 UQ10) | 16.8 |
2040343 | (1999 NH9) | 16.8 |
2016418 | Lortzing | 16.8 |
2035760 | (1999 HP1) | 16.8 |
2040733 | (1999 SM17) | 16.8 |
2024940 | Sankichiyama | 16.9 |
2037410 | (2001 XQ118) | 16.9 |
2048784 | (1997 SX) | 16.9 |
2276400 | (2002 XS45) | 16.9 |
2010540 | Hachigoroh | 16.9 |
2011356 | Chuckjones | 16.9 |
2012496 | Ekholm | 16.9 |
2017786 | (1998 FL36) | 17.0 |
2010384 | (1996 TQ10) | 17.0 |
2031564 | (1999 FF9) | 17.0 |
2030947 | (1994 JW) | 17.0 |
2011368 | (1998 HN115) | 17.0 |
2029254 | (1993 FR1) | 17.0 |
2034620 | (2000 UX54) | 17.0 |
2056151 | (1999 CX104) | 17.0 |
2034632 | (2000 UY109) | 17.0 |
2052640 | (1997 WJ46) | 17.0 |
2049676 | (1999 TZ2) | 17.0 |
2053243 | (1999 CW140) | 17.0 |
2052766 | (1998 MC38) | 17.1 |
2058627 | Rieko | 17.1 |
2011622 | Samuele | 17.1 |
2016029 | (1999 DQ6) | 17.1 |
2064215 | (2001 TP106) | 17.1 |
2056471 | (2000 GX106) | 17.1 |
2018801 | Noelleoas | 17.1 |
2164716 | (1998 GH) | 17.1 |
2029414 | (1996 XF1) | 17.2 |
2103705 | (2000 CW82) | 17.2 |
2053603 | (2000 CF75) | 17.2 |
2029162 | (1989 SD4) | 17.2 |
2042791 | (1999 AD6) | 17.2 |
2082880 | (2001 QN70) | 17.2 |
2033112 | (1998 BL1) | 17.3 |
2055887 | (1997 WE37) | 17.3 |
2030314 | Yelenam | 17.3 |
2030283 | (2000 HS57) | 17.3 |
2064307 | (2001 UQ29) | 17.3 |
2015480 | (1999 CB14) | 17.3 |
2008371 | Goven | 17.3 |
2031951 | Alexisallen | 17.3 |
2061461 | (2000 QA31) | 17.3 |
2011232 | (1999 JA77) | 17.3 |
2111171 | (2001 VL120) | 17.3 |
2032348 | (2000 QL103) | 17.3 |
2019330 | (1996 XJ31) | 17.3 |
2019486 | (1998 HW122) | 17.3 |
2088699 | (2001 RW142) | 17.3 |
2032450 | (2000 SH25) | 17.4 |
2068373 | (2001 PP13) | 17.4 |
2072902 | (2001 KE71) | 17.4 |
2176915 | (2002 VW83) | 17.4 |
2018646 | (1998 ED21) | 17.4 |
2024374 | (2000 AV143) | 17.4 |
2146308 | (2001 KJ28) | 17.4 |
2043088 | (1999 WO9) | 17.4 |
2003823 | Yorii | 17.5 |
2087758 | (2000 SL85) | 17.5 |
2031396 | (1998 YQ12) | 17.5 |
2338847 | (2003 XZ21) | 17.5 |
2012373 | Lancearmstrong | 17.5 |
2063415 | (2001 KH55) | 17.5 |
2059461 | (1999 GO45) | 17.6 |
2040018 | (1998 HH134) | 17.6 |
2052299 | (1991 NJ1) | 17.6 |
2019273 | (1995 XJ) | 17.6 |
2147566 | (2004 FB37) | 17.6 |
2307490 | (2002 XU79) | 17.6 |
2133202 | (2003 QT63) | 17.7 |
2055388 | (2001 SN276) | 17.7 |
2014074 | Riccati | 17.7 |
2057523 | (2001 ST290) | 17.7 |
2028406 | (1999 TB100) | 17.7 |
2176641 | (2002 NQ9) | 17.7 |
2090852 | (1996 GS4) | 17.7 |
2010606 | Crocco | 17.7 |
2010694 | Lacerda | 17.7 |
2025598 | (1999 YK16) | 17.8 |
2020749 | (2000 AD199) | 17.8 |
2159629 | Brunszvik | 17.8 |
2005553 | Chodas | 17.8 |
2013685 | (1997 QG4) | 17.8 |
2080044 | (1999 JN40) | 17.8 |
2096672 | (1999 JG36) | 17.8 |
2102622 | (1999 VR25) | 17.8 |
2050786 | (2000 FY19) | 17.8 |
2037748 | (1997 AF2) | 17.8 |
2098262 | (2000 SF185) | 17.8 |
2168546 | (1999 VA189) | 17.9 |
2057821 | (2001 WD44) | 17.9 |
2414858 | (2010 VD86) | 17.9 |
2095978 | (2004 LT22) | 17.9 |
2055617 | (2002 TF79) | 17.9 |
2045538 | (2000 CG29) | 17.9 |
2034146 | (2000 QH16) | 17.9 |
2045601 | (2000 DE5) | 17.9 |
2029265 | (1993 FV18) | 17.9 |
2027165 | (1999 AM7) | 18.0 |
2042810 | (1999 JP72) | 18.0 |
2241122 | (2007 PU22) | 18.0 |
2027735 | (1990 SZ5) | 18.0 |
2063500 | (2001 OS69) | 18.0 |
2422497 | (2014 TJ) | 18.0 |
2364888 | (2008 EN57) | 18.0 |
2077708 | (2001 OS31) | 18.1 |
2026992 | (1997 WE47) | 18.1 |
2162508 | (2000 QA65) | 18.1 |
2084523 | (2002 UF2) | 18.1 |
2216978 | (2000 OE17) | 18.1 |
2119760 | (2001 YN113) | 18.2 |
2057333 | (2001 QX246) | 18.2 |
2109965 | (2001 SY49) | 18.2 |
2051287 | (2000 KH16) | 18.2 |
2095496 | (2002 ET34) | 18.2 |
2152274 | (2005 SD231) | 18.2 |
2082250 | (2001 KW2) | 18.4 |
2035999 | (1999 NB22) | 18.4 |
2075989 | (2000 DF7) | 18.5 |
... | ... | show all 172 |
Other process notes:
- Max stacking: In processing these images I used the pixel-wise maximum of a stack of 3 images to make each of the processed frames that I start with in image set 1. Taking a max of values across pixels can be problematic as it will select outliers in noisy data. For the purposes of this analysis at least, the data does not seem problematically noisy. In fact, in testing the median, average and maximum, the maximum value showed the best results. This isn't totally surprising; if a series of observations was noiseless the maximum value of those series of pixel observations would be the best registration of the source compared to the average or median. The way I think of it, I want to be using the pixel value with the strongest potential signal. I can figure out if that signal is real or not by looking for it across multiple frames. More noise will be present, yes, but it is not likely to arrange itself in a streak that coincides with the known orbit of a solar system object.
- Trimmed max template: Related to the above point, my static sky template is also not a median or an average; it's a trimmed maximum. The idea here is that I am building a mask as much as a template. If I have 10 input image pixels at a location and I select the 2nd highest value for the template I will essentially zero out that pixel for 9/10 difference images (I enforce a floor of zero for difference images). The one non-zeroed pixel is my potential detection or it's something close to zero (for a non-detection). This is likely just a decent heuristic-based approach and a more careful characterization of the pixel statistics of the image would probably yield better results.
Ideas & Todos:
- Object recall: I mentioned I matched 172/572 (30%) of the know asteroids in frame 4 brighter than 19th magnitude. I think this is a good metric for comparison going forward. I can use it to see whether my process is improving or not. I matched 45/501 (8.9%) in my preliminary study, so there's certainly been some improvement since then.
- Detect across multiple frames: Related to the above point, I should be able to improve recall by matching detections in more than one frame. Some objects show up in one difference frame and not the other, so looking across all of my difference frames will certainly help.
- Matching without thresholding: I'm not thresholding the difference images for the display above, but I am still thresholding them to get the source locations that I use to try to match. This is definitely filtering out some dim/small potential sources, so I need to either push the threshold level lower or not threshold at all before I try to match. At a certain point I'm worried about having so much noise that I start to "match" noise to real object locations.
- Look for dimmer objects (maybe TNOs): I definitely still want to do this.
- Do some OD: I can probably start thinking about using orbit determination now that I've got a better understanding of the WCS and coordinate system for the TESS observer. As I start to track objects across multiple frames this may be the better way to go.
- Remove fewer frames: I mentioned I was using only 5 of 10 frames for this analysis. I might try rejecting frames with substantially more source counts than known frame objects rather than rejecting frames with counts different than the average count. For instance, all of these frames had ~250 sources in the difference images. I rejected frames that had as little as 500 sources because that was considerably more than the average. I may be rejecting my best frames for matching.
- Difference imaging for SSBs vs. other phenomena: This is more of a musing, but as I read more about how LSST builds templates and does image differencing, I wonder whether these two things are at all dependent on their application. For instance, LSST is doing far more than just detecting solar system objects. Are the template images best suited to detecting solar system objects the same as templates for detecting variable stars or supernovae? And are bootstrapped templates built from the frames under investigation better or worse for object detection? More reading is required here I guess.
- Look at Comet 46P/Wirtanen: TESS recorded an outburst of this comet. It might be interesting to apply some of my image processing tools to these frames to see if I can observe it too.
- Not deconvolving a PSF yet: This is another thing that will surely improve detection potential when I implement it. It's probably going to take some TESS-specific literature reading to understand how people are modeling the PSF for full frame images.
- The cover of my next album (if I made albums): I generated this image while segmenting the frame for this study and thought it was pretty cool.
Discussion:
Almost as soon as I published the preliminary study last month I was able to significantly improve detection with the techniques I mention above. This study was supposed to be a hunt for TNOs, but after I saw those improvements I decided to publish the results first and focus on getting matching nailed down at the same time. The matching work is not quite as exciting as the image analysis and detection, but correctly and accurately identifying dots in an image is obviously critical for moving forward with a project like this.
I'm exactly not sure what's next yet. I might look for TNOs or work on matching fainter objects in full frames a little more. Either will surely inform the other, so there's probably not a wrong way to proceed. I really like the idea of searching for the fainter objects either way, and I think this new recall metric is going to be a useful way to measure the improvement in the ability of my image processing techniques to see the fainter stuff. I haven't found a 19th magnitude object yet; maybe I can pull one of those out of the data soon.
Published: 12/8/2019