Change the super pixel color filter array in a color sensor
This script illustrates how to change the CFA in a sensor.
See also: sensorShowCFA, sensorPlot, cameraCreate, cameraWindow
Contents
- Make a standard oi, sensor and ip
- Here are the data transformed by the image processor
- Adjust the sensor to a different type
- Now show the transformed data again
- If you would like a different RGB spatial pattern ...
- Now show the transformed data again
- Now a white pixel
- Now show the transformed data again
- Now a quad sensor
- END
ieInit
Make a standard oi, sensor and ip
camera = cameraCreate;
% Use a small fov
fov = 20;
pSize = [1.4 1.4]*1e-6;
Camera from default oi,sensor and ip
dir(fullfile(isetRootPath,'data','images','rgb'))
% woodDuck.png scene = sceneFromFile('zebra.jpg','rgb', 300, displayCreate); % Create the scene and calculate with the camera % scene = sceneCreate('reflectance chart'); scene = sceneSet(scene,'fov',fov); camera = cameraSet(camera,'pixel size constant fill factor',pSize); camera = cameraCompute(camera,scene); % Show the sensor window cameraWindow(camera,'sensor');

Here are the data transformed by the image processor
cameraWindow(camera,'ip');
bayerSensor = sensorCreate; bayerSensor = sensorSet(bayerSensor,'fov',fov,cameraGet(camera,'oi')); bayerSensor = sensorSet(bayerSensor,'name','Bayer'); camera = cameraSet(camera,'sensor',bayerSensor); camera = cameraSet(camera,'pixel size constant fill factor',pSize); camera = cameraCompute(camera,'oi'); cameraWindow(camera,'sensor');

Adjust the sensor to a different type
cmySensor = sensorCreate('ycmy'); cmySensor = sensorSet(cmySensor,'fov',fov,cameraGet(camera,'oi')); cmySensor = sensorSet(cmySensor,'name','cmy'); camera = cameraSet(camera,'sensor',cmySensor); camera = cameraSet(camera,'pixel size constant fill factor',pSize); camera = cameraCompute(camera,'oi'); cameraWindow(camera,'sensor');

Now show the transformed data again
cameraWindow(camera,'ip');
If you would like a different RGB spatial pattern ...
sensor = sensorCreate('RGB'); % Notice that we have gone from a 2x2 super pixel to a 3x3. So we adjust % the pattern and the sensor size. sensor = sensorSet(sensor,'pattern and size',[ 2 1 2; 3 2 1; 2 3 2]); sensor = sensorSet(sensor,'fov',fov,cameraGet(camera,'oi')); sensor = sensorSet(sensor,'name','3x3 RGB'); sensor = sensorSet(sensor,'pixel size constant fill factor',pSize); camera = cameraSet(camera,'sensor',sensor); camera = cameraCompute(camera,'oi'); cameraWindow(camera,'sensor');

Now show the transformed data again
cameraWindow(camera,'ip');
Now a white pixel
rgbwSensor = sensorCreate('rgbw'); rgbwSensor = sensorSet(rgbwSensor,'fov',fov,cameraGet(camera,'oi')); rgbwSensor = sensorSet(rgbwSensor,'name','rgbw'); camera = cameraSet(camera,'sensor',rgbwSensor); camera = cameraSet(camera,'pixel size constant fill factor',pSize); camera = cameraCompute(camera,'oi'); cameraWindow(camera,'sensor');

Now show the transformed data again
camera Window(camera,'ip');
Now a quad sensor
quadSensor = sensorCreate; % Should be sensorCreateQuad; quadSensor = sensorSet(quadSensor,'pattern',[3 3 2 2; 3 3 2 2; 2 2 1 1; 2 2 1 1]); quadSensor = sensorSet(quadSensor,'fov',fov,cameraGet(camera,'oi')); quadSensor = sensorSet(quadSensor,'name','quad'); camera = cameraSet(camera,'sensor',quadSensor); camera = cameraSet(camera,'pixel size constant fill factor',pSize); camera = cameraCompute(camera,scene); cameraWindow(camera,'sensor'); img = cameraGet(camera, 'sensor rgb'); ieViewer(img);
