
Kalman Stack filter

inchinn
///////////////////////////////////////////////////////////// ///////////// Kalman filter for time series image stacks /////// ////the prediction bias determins the amount of filtering////////////// //////the noise estimate has little effect on the outcome///////////// ////////////////////////////////////////////////////////////////////////////// //Inserts a menu call in the Analysis menu, or can be called by typing // "kalman()" in the command line, it will only find 3 dimensional waves and outputs the filtered wave // to a new 16bit wave with "_Kal" appended to the original file name //Based on the imageJ code by Christopher Phillip Mauer function kalman() //Initialize variables and input waves string inputwave Variable G = 0.8 //Filter gain Variable V = 0.06 // error estimate string list=wavelist("*",";","DIMS:3") prompt inputwave, "Wave Select", popup list prompt G, "Prediction Bias" prompt V, "Noise Estimate" doprompt "Kalman Filter", inputwave, G,V if(V_flag==1) abort endif wave input=$inputwave // reference to wave being filtered redimension/s input // convert to single floating point variable z = dimsize(input,2) //counts the number of frames //Generate prediction seed Duplicate/FREE/o input, predicted redimension/N=(-1,-1,0) predicted multithread predicted=input[p][q][0] //Generate other variables duplicate/FREE/o predicted, one, observed one=1 //Generate error seed Duplicate/Free/o predicted, Perror Perror=V Duplicate/FREE/o Perror, errorEst //Generate ouput wave Duplicate/FREE/o input, output variable i for(i=0;i<z;i+=1) //Do filter multithread observed=input[p][q][i] //Get observed values matrixop/FREE/o Kalman=Perror/(Perror+errorEst) //Calculate Kalman gain matrixop/FREE/o corrected= g*predicted+(1-g)*observed+kalman*(observed-predicted) //calcuate corrected image matrixop/FREE/o correctedError = Perror*(one-kalman) // calculate corrected noise estimate matrixop/o Perror = correctedError //Update predicted noise Matrixop/o predicted = corrected //Update prediction multithread output[][][i]=corrected[p][q] //append corrected image to output stack endfor redimension/w output String outputname=inputwave+"_Kal" //Give filtered wave new name Duplicate/o output, $outputname newimage/k=1 $outputname //Display filtered wave with slider WMAppend3DImageSlider(); end menu "Analysis" "Kalman Filter", kalman() End

Forum

Support

Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More