Sky Camera Analysis Program: HSI Retriever
HSI Retriever is a legacy Java program that I have made modernizations and other improvements to at NOAA, contracted by Dr. Charles Long with the Department of Energy. I first received the source code in a decompiled form, with no comments or documentation (though thankfully Java preserves variable/method/class identifiers in the bytecode). After organizing and performing some clean up, I was able to implement many features at the client's request. I also analyzed the image filtering algorithm, writing up a thorough technical report using LaTeX.
HSI Retriever Screenshot
Here is a capture of the main program screen. There is a tree of selectable images (organized by date) on the left, while the main area displays both the raw and processed sky pictures. The bar on the bottom displays the percent cloud cover detected. New images are retrieved through HTTP over a network, as the cameras themselves (from Axis) act as small web servers. The original program only worked with old "Axis 200" cameras, which are no longer manufactured (making replacements and repairs difficult). I added the ability to use a modern "Axis 211a" camera, producing superior quality images at higher resolution. Since this camera had many different settings, including white balance and CCD pixel shape, I had to create several new options for adjusting image parameters. I also changed the filtering algorithm and other program areas to allow for the larger raw images. After these functionality improvements were implemented, I started working on developing a new way of determining which shade of blue constitutes clear sky (see details in the "Clear-Sky Reference Image" section below).
Raw Camera Picture Close-Up
This is a raw image captured using a new Axis 211a camera. The mirror assembly itself is a test unit, kept out of the field due to problems with rotation (which causes a mismatch between shadowband positions in raw and processed images, as visible in the previous picture). The arm holding the camera in position over the mirror and the "shadowband" that rotates to block out the sun are visible in this image. These areas are masked out in the processing when calculating cloud cover.
New Clear-Sky Reverence Image Selection Dialog
This is a screenshot of the new dialog I created for selecting clear-sky images to use as a reference when determining cloud cover. Any images showing cloud-free sky may be selected on the left, then added to the list of references on the right after previewing. I changed the filtering algorithm to select one of these reference images with the closest sun altitude angle to the current raw image. The reference image is then "rotated" (actually using coordinate transformation when selecting pixels) so that the sun azimuth angles match, making the raw and reference image shadowbands align. When processing a pixel in the raw image, a corresponding reference pixel is chosen from the "rotated" reference image to determine the level of cloudiness. Unfortunately, the simulated rotation causes the reference camera arm to appear in various areas. Depending on the option selected, raw pixels in this region are either masked out with a red bar (ignored when calculating cloud cover), or a representative blue color is chosen from a concentric area of the reference image.