Measure different sensor noise

*UPDATING IN PROGRESS*

Multiple captures are needed to evaluate dynamic noise. This script is being updated

Copyright Imageval Consulting, 2016

Contents

ieInit

Simple spatial resolution scene

scene = sceneCreate('slanted bar');
scene = sceneSet(scene,'fov',4);
ieAddObject(scene); sceneWindow

% Optical image
oi = oiCreate;
oi = oiCompute(oi,scene);
ieAddObject(oi); oiWindow
ans = 

  sceneWindow_App with properties:

                        figure1: [1×1 Figure]
                       FileMenu: [1×1 Menu]
                   menuFileLoad: [1×1 Menu]
                   menuFileSave: [1×1 Menu]
                  menuSaveImage: [1×1 Menu]
                menuFileRefresh: [1×1 Menu]
                  menuFileClose: [1×1 Menu]
                       menuEdit: [1×1 Menu]
              menuEditSceneName: [1×1 Menu]
               menuEditNewScene: [1×1 Menu]
                  menuCopyScene: [1×1 Menu]
                 menuEditDelete: [1×1 Menu]
             menuEditDeleteSome: [1×1 Menu]
                   menuSpectral: [1×1 Menu]
                     menuSPDdiv: [1×1 Menu]
                    menuSPDMult: [1×1 Menu]
          menuEditSetIlluminant: [1×1 Menu]
               menuResampleWave: [1×1 Menu]
       menuEditAdjustMonochrome: [1×1 Menu]
              menuEditTransform: [1×1 Menu]
              menuEditScaleSize: [1×1 Menu]
                       editCrop: [1×1 Menu]
              menuEditTranspose: [1×1 Menu]
                 menuEditRotate: [1×1 Menu]
                  menuEditRotCW: [1×1 Menu]
                 menuEditRotCCW: [1×1 Menu]
                   menuEditFlip: [1×1 Menu]
         menuEditFlipHorizontal: [1×1 Menu]
           menuEditFlipVertical: [1×1 Menu]
               menuEditFontSize: [1×1 Menu]
            menuEditClearWindow: [1×1 Menu]
                 menuEditViewer: [1×1 Menu]
                       PlotMenu: [1×1 Menu]
               menuPlotRadiance: [1×1 Menu]
              menuPlotRadianceE: [1×1 Menu]
              menuPlotRadImGrid: [1×1 Menu]
           menuPlotIllumPhotons: [1×1 Menu]
             menuPlotIlluminant: [1×1 Menu]
        menuPlotIlluminantImage: [1×1 Menu]
            menuPlotReflectance: [1×1 Menu]
             menuPlotImTrueSize: [1×1 Menu]
            menuPlotMultipleRGB: [1×1 Menu]
          menuPlotImageSpectral: [1×1 Menu]
                  menuPlotDepth: [1×1 Menu]
           menuPlotDepthContour: [1×1 Menu]
                      menuScene: [1×1 Menu]
               menuSceneMacbeth: [1×1 Menu]
       menuSceneMacbethTungsten: [1×1 Menu]
            menuSceneMacbethD50: [1×1 Menu]
            menuSceneMacbethD65: [1×1 Menu]
              menuSceneMacbethC: [1×1 Menu]
    menuSceneMacbethFluorescent: [1×1 Menu]
          menuSceneMacbethVisIR: [1×1 Menu]
                 menuSceneLstar: [1×1 Menu]
                 menuScenesTest: [1×1 Menu]
                menuScenesSweep: [1×1 Menu]
                   menuHarmonic: [1×1 Menu]
            menuSceneFreqOrient: [1×1 Menu]
            menuSceneSlantedBar: [1×1 Menu]
             menuSceneZonePlate: [1×1 Menu]
                menuSceneMackay: [1×1 Menu]
          menuSceneCheckerboard: [1×1 Menu]
            menuScenePointArray: [1×1 Menu]
             menuSceneGridLines: [1×1 Menu]
              menuSceneTestLine: [1×1 Menu]
           menuSceneRadialLines: [1×1 Menu]
                    menuUniform: [1×1 Menu]
         menuSceneUniformPhoton: [1×1 Menu]
             menuSceneUniformEE: [1×1 Menu]
                 menuUniformD65: [1×1 Menu]
      menuSceneUniformEESpecify: [1×1 Menu]
      menuSceneUniformBBspecify: [1×1 Menu]
                 menuScenesRamp: [1×1 Menu]
                 menuSceneNoise: [1×1 Menu]
                  menuSceneFile: [1×1 Menu]
             menuSceneMultiSpec: [1×1 Menu]
             menuSceneChooseRGB: [1×1 Menu]
         menuFileChooseFileMono: [1×1 Menu]
                         menuAn: [1×1 Menu]
                menuAnalyzeLine: [1×1 Menu]
               menuAnalyzeLineH: [1×1 Menu]
               menuAnalyzeLineV: [1×1 Menu]
               menuAnalyzeLFFTH: [1×1 Menu]
               menuAnalyzeLFFTv: [1×1 Menu]
            menuAnalyzeLineWave: [1×1 Menu]
                 menuAnalyzeLWH: [1×1 Menu]
                 menuAnalyzeLWV: [1×1 Menu]
                 menuAnalyzeROI: [1×1 Menu]
                  menuLuminance: [1×1 Menu]
        menuAnalyzeChromaticity: [1×1 Menu]
                  menPlotLumLin: [1×1 Menu]
                  PlotLuminance: [1×1 Menu]
            menuAnIlluminantCCT: [1×1 Menu]
                       menuHelp: [1×1 Menu]
       menuHelpSceneProgrammers: [1×1 Menu]
              menuHelpProgGuide: [1×1 Menu]
               menuHelpAppNotes: [1×1 Menu]
                        UITable: [1×1 Table]
                          Panel: [1×1 Panel]
                     txtMessage: [1×1 Label]
                        Panel_2: [1×1 Panel]
                    popupRender: [1×1 DropDown]
                         text21: [1×1 Label]
                txtDisplayGamma: [1×1 Label]
                      editGamma: [1×1 EditField]
                        btnPrev: [1×1 Button]
                        btnNext: [1×1 Button]
               popupSelectScene: [1×1 DropDown]
                     sceneImage: [1×1 UIAxes]
                 MoreinfoButton: [1×1 Button]
                 boxDescription: [1×1 ButtonGroup]
            txtSceneDescription: [1×1 Label]
                       boxScene: [1×1 ButtonGroup]
                           txtM: [1×1 Label]
                        txtDist: [1×1 Label]
                   editDistance: [1×1 EditField]
                         txtDeg: [1×1 Label]
                         txtFOV: [1×1 Label]
                     editHorFOV: [1×1 EditField]
                        txtCDM2: [1×1 Label]
                         txtLum: [1×1 Label]
                  editLuminance: [1×1 EditField]
                      imageMenu: [1×1 ContextMenu]
                 HorLumLineMenu: [1×1 Menu]
                    RefreshMenu: [1×1 Menu]


ans = 

  oiWindow_App with properties:

                      figure1: [1×1 Figure]
                     FileMenu: [1×1 Menu]
               menuFileLoadOI: [1×1 Menu]
               menuFileSaveOI: [1×1 Menu]
                menuSaveImage: [1×1 Menu]
              menuFileRefresh: [1×1 Menu]
                menuFileClose: [1×1 Menu]
                     EditMenu: [1×1 Menu]
                 menuEditName: [1×1 Menu]
               menuEditCreate: [1×1 Menu]
                   menuCopyOI: [1×1 Menu]
               menuEditDelete: [1×1 Menu]
           menuEditDeleteSome: [1×1 Menu]
                menuEditScale: [1×1 Menu]
             RemoveborderMenu: [1×1 Menu]
             menuEditFontSize: [1×1 Menu]
         menuEditClearMessage: [1×1 Menu]
               menuEditViewer: [1×1 Menu]
                     PlotMenu: [1×1 Menu]
               plotIrradiance: [1×1 Menu]
          menuPlotIrradEnergy: [1×1 Menu]
                  menuPlotRGB: [1×1 Menu]
            menuPlotImageGrid: [1×1 Menu]
             menuPlotMultiRGB: [1×1 Menu]
        menuPlotImageSpectral: [1×1 Menu]
             menuPlotDepthmap: [1×1 Menu]
         menuPlotDepthContour: [1×1 Menu]
                   menuOptics: [1×1 Menu]
                menuStandForm: [1×1 Menu]
        menuOpticsQuarterInch: [1×1 Menu]
              menuOpticsThird: [1×1 Menu]
           menuOpticsHalfInch: [1×1 Menu]
          menuOpticsTwoThirds: [1×1 Menu]
               menuOpticsInch: [1×1 Menu]
                    menuHuman: [1×1 Menu]
              menuOpticsHuman: [1×1 Menu]
                  menuMacular: [1×1 Menu]
               menuMacular028: [1×1 Menu]
      menuOpticsRayTraceParam: [1×1 Menu]
                 menuOptTrans: [1×1 Menu]
             menuOpticsRename: [1×1 Menu]
             menuOpticsImport: [1×1 Menu]
             menuOpticsExport: [1×1 Menu]
             menuOpticsLoadSI: [1×1 Menu]
          menuOpticsConvertCV: [1×1 Menu]
          menuOpticsConvertZM: [1×1 Menu]
                       menuAn: [1×1 Menu]
                     menuPlOp: [1×1 Menu]
              menuAnOpticsPSF: [1×1 Menu]
                menuPlotPS550: [1×1 Menu]
               menuAnPSFMovie: [1×1 Menu]
               menuPlotLSWave: [1×1 Menu]
               menuOTFAnyWave: [1×1 Menu]
                      plotOTF: [1×1 Menu]
                menuPlOTFWave: [1×1 Menu]
       menuAnOpImFieldAndWave: [1×1 Menu]
         menuAnalyzeOptFieldD: [1×1 Menu]
            menuAnOptSampling: [1×1 Menu]
              menuPlotOffAxis: [1×1 Menu]
            menuTransmittance: [1×1 Menu]
              menuAnLineIllum: [1×1 Menu]
    menuAnLineIllumHorizontal: [1×1 Menu]
        menuAnLineIllumHorFFT: [1×1 Menu]
      menuAnLineIllumVertical: [1×1 Menu]
       menuAnLineIllumVertFFT: [1×1 Menu]
         menuAnalyzeLinePlots: [1×1 Menu]
                    menuHline: [1×1 Menu]
                    menuVLine: [1×1 Menu]
           menuPlotHLContrast: [1×1 Menu]
           menuPlotVLContrast: [1×1 Menu]
             menuROISummaries: [1×1 Menu]
              menuPlotLuxHist: [1×1 Menu]
                  menuPlotCIE: [1×1 Menu]
             menuPlotIllumLog: [1×1 Menu]
             menuPlotIllumLin: [1×1 Menu]
                   menuFFTamp: [1×1 Menu]
                     menuHelp: [1×1 Menu]
             menuHelpOIOnline: [1×1 Menu]
         menuHelpOpticsOnline: [1×1 Menu]
           menuHelpISETOnline: [1×1 Menu]
             menuHelpAppNotes: [1×1 Menu]
          OpticssettingsPanel: [1×1 Panel]
                  popDiffuser: [1×1 DropDown]
                  txtDiffuser: [1×1 Label]
                    txtBlurSD: [1×1 Label]
             editDiffuserBlur: [1×1 EditField]
                 Cos4thSwitch: [1×1 Switch]
            Cos4thSwitchLabel: [1×1 Label]
                  btnSimulate: [1×1 Button]
                   txtFnumber: [1×1 Label]
               popOpticsModel: [1×1 DropDown]
                  editFnumber: [1×1 EditField]
               txtFocalLength: [1×1 Label]
              editFocalLength: [1×1 EditField]
                      UITable: [1×1 Table]
                      btnNext: [1×1 Button]
                      btnPrev: [1×1 Button]
                  popupRender: [1×1 DropDown]
             pulldownSelectOI: [1×1 DropDown]
                       text32: [1×1 Label]
                   txtMessage: [1×1 Label]
              txtDisplayGamma: [1×1 Label]
                    editGamma: [1×1 EditField]
                      oiImage: [1×1 UIAxes]

Set the sensor noise properties

% Set up the sensor for a noise free calculation
sensor = sensorCreate;
sensor = sensorSet(sensor,'exp time',0.050);
sensor = sensorSet(sensor,'noise flag',0);

sensorNF = sensorCompute(sensor,oi);
v = sensorGet(sensorNF,'volts');

ieAddObject(sensorNF); sensorWindow
% sensorNF = vcGetObject('sensor');
ans = 

  sensorWindow_App with properties:

                          figure1: [1×1 Figure]
                         menuFile: [1×1 Menu]
                     menuFileLoad: [1×1 Menu]
                 menuSensorImport: [1×1 Menu]
             menuFileLoadVoltsMat: [1×1 Menu]
                     menuFileSave: [1×1 Menu]
                 menuSensorExport: [1×1 Menu]
             menuFileSaveVoltsMat: [1×1 Menu]
                    menuSaveImage: [1×1 Menu]
                menuFileSpecsheet: [1×1 Menu]
                     menuFileResh: [1×1 Menu]
                    menuFileClose: [1×1 Menu]
                         menuEdit: [1×1 Menu]
                     menuEditName: [1×1 Menu]
                   menuEditCreate: [1×1 Menu]
                   menuCopySensor: [1×1 Menu]
                   menuEditDelete: [1×1 Menu]
                   editDeleteSome: [1×1 Menu]
                     editCropMenu: [1×1 Menu]
             menuEditResampleWave: [1×1 Menu]
              sensorEditClearData: [1×1 Menu]
                 menuEditFontSize: [1×1 Menu]
                   menuEditViewer: [1×1 Menu]
               LoadSaveSensorMenu: [1×1 Menu]
                         menuPlot: [1×1 Menu]
                       menuImDSNU: [1×1 Menu]
                       menuImPRNU: [1×1 Menu]
                  menuImShotNoise: [1×1 Menu]
                  menuPlotSpectra: [1×1 Menu]
             menuPlotColorFilters: [1×1 Menu]
                       menuPlotIR: [1×1 Menu]
               plotSpecCFApattern: [1×1 Menu]
             menuPlotPDSpectralQE: [1×1 Menu]
                 menuPlotSpecResp: [1×1 Menu]
                  menuPlotPixelSR: [1×1 Menu]
         menuPlotSensorImageTSize: [1×1 Menu]
                   plotMccOverlay: [1×1 Menu]
                menuPlotHumanCone: [1×1 Menu]
                       menuSensor: [1×1 Menu]
                         LoadMenu: [1×1 Menu]
                          CFAMenu: [1×1 Menu]
                 ColorfiltersMenu: [1×1 Menu]
              PhotodetectorQEMenu: [1×1 Menu]
                     IRfilterMenu: [1×1 Menu]
                       menuPDSize: [1×1 Menu]
              menuSensorMicrolens: [1×1 Menu]
                    menuDesignCFA: [1×1 Menu]
             menuSensorHumanCones: [1×1 Menu]
                    humanCones631: [1×1 Menu]
               humanConesKLMS1631: [1×1 Menu]
                    menuSensorCDS: [1×1 Menu]
                 menuSensorColFPN: [1×1 Menu]
        menuSensorPixelVignetting: [1×1 Menu]
         menuSensorSetComputeGrid: [1×1 Menu]
                      menuAnalyze: [1×1 Menu]
                        LinesMenu: [1×1 Menu]
                   menuHorizontal: [1×1 Menu]
                 menuHorLineVolts: [1×1 Menu]
                     menuHorLineE: [1×1 Menu]
                    menuHorLineDV: [1×1 Menu]
                     menuVertical: [1×1 Menu]
                      menuAnLineV: [1×1 Menu]
                    menuVertLineE: [1×1 Menu]
                   menuVertLineDV: [1×1 Menu]
                     TwoLinesMenu: [1×1 Menu]
                   HorizontalMenu: [1×1 Menu]
                        VoltsMenu: [1×1 Menu]
                    ElectronsMenu: [1×1 Menu]
                 DigitalcountMenu: [1×1 Menu]
                     VerticalMenu: [1×1 Menu]
                      VoltsMenu_2: [1×1 Menu]
                  ElectronsMenu_2: [1×1 Menu]
               DigitalcountMenu_2: [1×1 Menu]
                   menuAnROIStats: [1×1 Menu]
                      menuAnBasic: [1×1 Menu]
                     menuAnBasicE: [1×1 Menu]
                     MeanSDdvMenu: [1×1 Menu]
             menuAnHistogramVolts: [1×1 Menu]
                   menuAnPixHistQ: [1×1 Menu]
                  HistogramdvMenu: [1×1 Menu]
                         menuAnPO: [1×1 Menu]
          menuAnalyzePOVignetting: [1×1 Menu]
             menuAnalyzeMicroLens: [1×1 Menu]
               menuAnPixOptLoadUL: [1×1 Menu]
               menuAnPixOptSaveUl: [1×1 Menu]
                   menuAnPOShowUL: [1×1 Menu]
                        menuAnSNR: [1×1 Menu]
                   menuAnPixelSNR: [1×1 Menu]
                  menuAnSensorSNR: [1×1 Menu]
                  menuPixelLuxSec: [1×1 Menu]
                 menuSensorLuxSec: [1×1 Menu]
                       menuISOSat: [1×1 Menu]
              menuAnExposureValue: [1×1 Menu]
                    menuAnPhotExp: [1×1 Menu]
                      menuAnColor: [1×1 Menu]
                    menuAnColorRB: [1×1 Menu]
                    menuAnColorRG: [1×1 Menu]
                  CCManalysisMenu: [1×1 Menu]
           menuAnComputeFromScene: [1×1 Menu]
                         menuHelp: [1×1 Menu]
             menuHelpSensorOnline: [1×1 Menu]
              menuHelpPixelOnline: [1×1 Menu]
         menuHelpISETOnlineManual: [1×1 Menu]
                     menuAppNotes: [1×1 Menu]
                      SensorPanel: [1×1 Panel]
                   ResizeDropDown: [1×1 DropDown]
              ResizeDropDownLabel: [1×1 Label]
                      sensorTable: [1×1 Table]
                  btnComputeImage: [1×1 Button]
                  popQuantization: [1×1 DropDown]
                           popISA: [1×1 DropDown]
                      txtMVperSec: [1×1 Label]
                          txtPRNU: [1×1 Label]
                           text25: [1×1 Label]
                           txtFPN: [1×1 Label]
                      editGainFPN: [1×1 EditField]
                    editOffsetFPN: [1×1 EditField]
                           txtRow: [1×1 Label]
                      editISAcols: [1×1 EditField]
                      editISARows: [1×1 EditField]
                    ExposurePanel: [1×1 Panel]
                      AutoESwitch: [1×1 Switch]
                 AutoESwitchLabel: [1×1 Label]
                     popupExpMode: [1×1 DropDown]
                    editExpFactor: [1×1 EditField]
                   editNExposures: [1×1 EditField]
                 txtExposureUnits: [1×1 Label]
                      editExpTime: [1×1 EditField]
           btnShowCFAExpDurations: [1×1 Button]
                       PixelPanel: [1×1 Panel]
                   txtReadNoise_2: [1×1 Label]
                       pixelTable: [1×1 Table]
                           text21: [1×1 Label]
                           text20: [1×1 Label]
                           text19: [1×1 Label]
                     txtDkCurrent: [1×1 Label]
                           text12: [1×1 Label]
                 editVoltageSwing: [1×1 EditField]
                     editConvGain: [1×1 EditField]
                      txtConvGain: [1×1 Label]
                   txtDarkCurrent: [1×1 Label]
                  editDarkCurrent: [1×1 EditField]
                     txtReadNoise: [1×1 Label]
                    editReadNoise: [1×1 EditField]
                            Panel: [1×1 Panel]
               txtBracketExposure: [1×1 Label]
                          Panel_2: [1×1 Panel]
                         imageCFA: [1×1 Image]
    sliderSelectBracketedExposure: [1×1 Slider]
                  MaxbrightSwitch: [1×1 Switch]
             MaxbrightSwitchLabel: [1×1 Label]
                   GammaEditField: [1×1 EditField]
              GammaEditFieldLabel: [1×1 Label]
                       txtMessage: [1×1 Label]
                          btnPrev: [1×1 Button]
                          btnNext: [1×1 Button]
                      popupSelect: [1×1 DropDown]
                          imgMain: [1×1 UIAxes]
                         Property: []

Now compute with all noise terms on

nSamp = 100;
voltImages = sensorComputeSamples(sensorNF,nSamp);
Warning: Needs updating 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 
Warning: Must be updated for new noise model 

Look at the noise histogram across all images

noiseImages = voltImages - repmat(v,[1 1 nSamp]);
ieNewGraphWin; histogram(noiseImages(:),100)
s = std(voltImages,0,3);
ieNewGraphWin;
imagesc(s); colorbar
meanImage = mean(voltImages,3);
plot(meanImage(:),v(:),'.')
grid on;
axis equal
s1 = sensorCompute(sensor,oi);
s2 = sensorCompute(sensor,oi);

v1 = sensorGet(s1,'volts');
v2 = sensorGet(s2,'volts');
histogram(v1(:) - v2(:),100)