For this post, I wanted to write a little more about research related topics. My work right now is focused on image processing. I'm working with Cassini ISS (Imaging Science Subsystem) images that needs to be processed and map projected to be useful for science. I use ISIS3 to ingest, process, and project the images. As part of my research, I looked into two filters (which can be accessed as applications or terminal commands in ISIS) to use in my processing workflow, and here, I've reported on those two filters and how they work.
The first filter/application is the noisefilter.
According to the ISIS GitHUB documentation on noise, things that count as noise include:
"Telemetry data dropouts or transmission errors"
"Malfunctioning or dead detector"
"Read noise native to the CCD system"
"Coherent noise caused by spurious electronic signals from the operation of instruments onboard the spacecraft"
Bad pixels, pixels that are considered noise, are replaced by this filter. There are two options for what to replace it with. Either, the filter can interpolate using the surrounding data to fill in the pixel (using the average of the surrounding area, the size of which is defined by a “boxcar,” a number of pixel wide and a number of pixels long, usually a square matrix ex. 3x3, 5x5, etc.) or it can replace the pixel with “null” which is essentially saying that there is no data there.
As part of the options for the filter, the user can define what is considered noise. This is done by setting the TOLMIN and TOLMAX, or the tolerance minimum and tolerance maximum. The average of the pixels in the “boxcar” is compared against the pixel in question (that might be noise). If the difference between the average and pixel is greater than the tolerance, then the pixel is considered noise.
As an additional parameter the user can set the tolerance to be measure in DN, as in specifying that above a certain value (depending on the measurement type reflectance (I/F), radiance, elevation, or radius) or below a certain value is noise, or in standard deviation. Essentially this is the idea that if the pixel is a specified number of standard deviations (given as the TOLMIN and TOLMAX) away from the average of the pixels in the boxcar, then it is considered noise.
Essentially, the real goal of this filter overall is to remove outlier pixels that are not actually part of the scene, and replace them with either an average pixel, or a null pixel.
The previously mentioned Boxcar can also be adjusted by the user. First, its size can be modified to be a certain number of pixels by a certain number of pixels (samples and lines). the user can also specify values for the lowest value of a pixel that can be used in a boxcar and the highest value of a pixel that can be used in a boxcar, as well as how many valid pixels have to be available, by specifying the minimum number of pixels the boxcar.
Finally, there are options to specify if certain types of pixels are noise right off the bat, without doing the boxcar average test. These include Null pixels, High instrument saturation (HIS) pixels, High representation pixels (HRS), Low instrument saturation (LIS) pixels, and Low representation pixels (LRS).
HIS pixels are oversaturated, they have values too high to be measured accurately, and correspondingly LIS pixels are undersaturated with values too low to be measured accurately.
HRS pixels are also oversaturated but are determined by the pixels having a DN value, which shows intensity, that is too high to be valid, or too low to be valid in the case of LRS pixels.
HIS, LIS, HRS, and LRS pixels are the pixels that count as invalid pixels for the boxcar.
The lowpass filter/application is designed to fill in certain pixels or to act as a smoothing filter. The filter, much like the noise filter, defines a boxcar (a matrix of pixels ex. 3x3, 5x5 etc) by samples and lines, surrounding a given pixel. The average of the boxcar replaces the given pixel in the output cube. However, the user specifies which pixels have the filter applied. Running the filter over the whole image will bluff or smooth the whole image. Alternatively the user can specify a specific range of pixels (defined by DN value minimum and maximum and the minimum number of valid pixels in a boxcar) to be filtered. The minimum and maximum can also be changed to be a percentage. The pixels can be either inside or outside the range specified. So you could say only filter the pixels outside the middle 98 percent of the data by defining the filter to work outside the 1 percent minimum and 1 percent maximum. Finally, there is an option to only use the filter on certain types of pixels, such as special pixels. The options for these “special” pixels include any combination of HIS, LIS, HRS, LRS, or Null pixels.
Finally, rather than replacing the center pixel of the boxcar with the new average of the boxcar, the filter does allow the user to instead replace the specified pixels with null. This might be used to replace all pixels outside a certain data range with null, removing that data from the image.
Visual Results of Processing
Visually, the Cassini ISS images often need these filters to deal with noise (using the noisefilter), but also to deal with the striping issues seen below in this Cassini ISS images (N1489061272_1). Parts of the image, usually the parts more toward the edge of the planet, only have data every other line. Thus, the intermediate lines need to be filled in using the data on the lines above and below. The lowpass filter fills in the "null" pixels of these intermediate lines.
Both of these filters suit my purposes and my research into them lets me alter them to only change pixels that are already "null" or that are artifacts and don't have any real data in them. I don't want to lower the resolution of the images at all, so I have to be careful not to alter any other pixels. Hope this information is helpful for any of you reading this!
Here are some links to the pages I used for my research:
Sneak peak: Workshops?....ArcGIS Pro?....Art History?....Baking cakes?....Who knows??