This demonstration shows how to use the data-driven detector array feature to simulate a "division of focal plane" polarization setup. In this example, we have constructed a 640 x 480 array that is checker boarded with a 2 x 2 pattern of linear polarization filters. These four filters use the Modified Pickering set of a 0, 45, 90 and 135 degree linear polarizaers.
Pixel Database
The key component to this simulation is the "pixel database" file. This file describes each pixel in the array via an ASCII/Text file where each line includes a geometry and (optional) radiometric description of a pixel. The data-driven array mechanism allows each pixel record (or line) to include a user-defined number of "attribute" fields followed by a set of required fields. These optional "attribute" fields allow a very large database of pixels to be sub-selected at run-time. In the example presented here, we included two "attribute" fields that indicate the X/Y coordinates of the pixel. Note, there is not a master list of allowed fields. To learn more about data-driven arrays, consult the BayerPattern1 demo too.
The required geometric fields for each pixel include:
-
The X-axis pointing angle in radians
-
The Y-axis pointing angle in radians
-
The X-axis instantaneous field-of-view (IFOV) in radians
-
The Y-axis instantaneous field-of-view (IFOV) in radians
Note that in the DIRSIG platform model, the Y-axis is the nominal along-track axis of the platform, but the local focal plane coordinate system is subject to any of the various affine transforms included in the platform attachments and mounts.
The required geometric fields are followed by a set of optional radiometric fields. In this includes:
-
The spectral response model index
-
The gain response model index
-
The noise response model index
Generating the Pixel Database
In this example, we wrote a small C++ program to generate the pixel database file (this program is included as make_pixels.cpp). However, this same file could have been generated in Excel or any other environment that can export data as ASCII/Text. The program is very simple an uses a set of hard-coded parameters that could be made into variables in a more complicated example. These fixed parameters include:
-
The focal length of the system (100 mm, in this example)
-
The pixel pitch or size (20 microns, in this example)
-
The 2 x 2 filter pattern
The program then iterates through each pixel in the 640 x 480 array, and for each pixel:
-
It computes the X/Y angles using the pixel location, focal length and simple trigonometry
-
It computes the X/Y IFOV angles using the pixel size, focal length and simple trigonometry
-
It determines the appropriate filter index using the 2 x 2 pattern
Example Pixel Database
The following excerpts from the pixels.dat file shows the general layout of the pixel database file employed in this example:
0 0 -0.0639128 0.0479632 0.0002 0.0002 0 1 0 -0.0637136 0.0479632 0.0002 0.0002 1 2 0 -0.0635145 0.0479632 0.0002 0.0002 0 ... 637 0 0.0633153 0.0479632 0.0002 0.0002 1 638 0 0.0635145 0.0479632 0.0002 0.0002 0 639 0 0.0637136 0.0479632 0.0002 0.0002 1 0 1 -0.0639128 0.0477636 0.0002 0.0002 2 1 1 -0.0637136 0.0477636 0.0002 0.0002 3 2 1 -0.0635145 0.0477636 0.0002 0.0002 2 ... 637 479 0.0633153 -0.0477636 0.0002 0.0002 3 638 479 0.0635145 -0.0477636 0.0002 0.0002 2 639 479 0.0637136 -0.0477636 0.0002 0.0002 3
The first two columns are "attribute fields" containing the X and Y pixel coordinates. The next 4 columns are the X/Y pixel angles and the X/Y IFOVs. The final column is the spectral response index, where 0 maps to the 0 degree filter, 1 maps to the 45 degree filter, 2 maps to the 90 degree filter and 3 maps to the 135 degree filter.
Spectral Response Functions
The pixel database has each pixel select from one of 4 different filters. These filters are a combination of a spectral response and a polarization response. If you look at the pi.platform file, you will see that the spectral response for the array has 4 "channels". Each channel has the same spectral response, but in the "Options" for the channel you will see that each has a linear polarizer defined at one of the four different angles. The channel index in the pixel database selects the appropriate channel and hence the appropriate linear polarization for the given pixel.
Simulation
Scene
For the scene, the "chunky bar" scene is used. This scene contains a set of four trapazoidal pilars (pyramids with the tops cut off). Each of the four pyramids has a different metal material on it creating four surfaces that polarize the reflected light a different amount.
Atmosphere
This simulation uses the "Simple" atmosphere model, so the skylight and path radiance is not polarized. This was chosen done to simplify the requirements for this demonstration, which was mainly focused on how to create the 2 x 2 polarized filter focal plane. An improved simulation would employ a polarized atmosphere using MODTRAN4-P and the Classic or Threshold atmosphere model.
Platform Positioning
The platform looks in on the scene from a 45 degree off vertical position.
Output Data
The output of the simulation is the raw pixel stream. That means the various linear polarization measurements are mosaiced within the single image band. To compute a Stokes Vector image, an interpolation scheme to estimate the various linear polarization states for each pixel from neighboring pixels needs to be employed and then the equations to compute the various Stokes Vector components would need to be applied to the estimated linear polarizations. Those calculations are beyond the scope of this demonstration. The output image file is the same simple binary data file format generated by other DIRSIG simulation setups.