40m QIL Cryo_Lab CTN SUS_Lab TCS_Lab OMC_Lab CRIME_Lab FEA ENG_Labs OptContFac Mariner WBEEShop | ||||||||||

| ||||||||||

| ||||||||||

| ||||||||||

I started out the day by taking some images from the CCD with the OLED switched off, to just look at the pattern when it's dark. The images looked like this: Taken with camera settings:
The statistical analysis of them using the functions from Friday gave the following result: At first glance, the distribution looks pretty Poissonian, as expected. There are a few scattered pixels registering a little brighter, but that's perhaps not so terribly unusual, given the relatively tiny spread of intensities with even the most extreme outliers. I won't say for certain whether or not there might be something unexpected at play, here, but I don't notice anything as unusual as the standard deviation 'spike' seen from intensities 120-129 as observed in the log from yesterday.
Speaking of that spike, the rest of the day was spent trying to investigate it a little more. In order to accomplish this, I wrote the following functions (all attached):
-spotfind.m -- inputs a 3D array of several Hartmann images as well as a starting pixel and threshold intensity level. analyzes the first image, scanning starting at the starting pixel until it finds a spot (with an edge determined by the threshold level), after which it finds a box of pixels which completely surrounds the spot and then shrinks the matrix down to this size, localizing the image to a single spot
-singspotcent.m -- inputs the image array outputted from spotfind, subtracts an estimate of the background, then uses the centroiding algorithm sum(x*P^2)/sum(P^2) to find the centroid (where x is the coordinate and P is the intensity level), then outputs the centroid location
-hemiadd.m -- inputs the image from spotfind and the centroid from singspotcent, subtracts an estimate of the background, then finds the sum total intensity in the top half of the image above the centroid, the bottom half, the left half and the right half, outputs these values as n-component vectors for an n-image input, subtracts from each vector its mean and then plots the deviations in intensity from the mean in each half of the image as a function of time
-edgeadd.m -- similar to hemiadd, except that rather than adding up all pixels on one half of the image, it inputs a threshold, determines how far to the right of the centroid that the spot falls past this treshold and uses it as a radial length, then finds the sum of the intensities of a bar of 3 pixels on this "edge" at the radial length away from the centroid.
-spotfft.m -- performs a fast fourier transform on the outputs from edgeadd, outputting the frequency spectrum at which the intensity of these edge pixels oscillate, then plotting these for each of the four edge vectors. see an example output below.
--halfspot_fluc.m and halfspot_edgefluc.m -- master functions which combine and automate the functions previous
some level of noise, but whether it's the culprit for our 'flickering' spike in the standard deviation remains to be seen.Here is the frequency spectrum of the edge intensity sums for two separate spots, found over 128 images: Intensity Sum Amplitude Spectrum of Edge Fluctuations, 128 images, spot search point (100,110), threshold level 110128 images, spot search point (100,100), threshold level 129A few things to note, to myself and others:
--I still should construct a Bode plot from this data and see if I can deduce anything useful from it
--I should think about whether or not my algorithms are good for detecting what I want to look at. Is looking at a 3 pixel vertical or horizontal 'bar' on the edge good for determining what could possibly be a more spherical phenomenon? Are there any other things I need to consider? How will the settings of the camera affect these images and thus the results of these functions?
--Am I forgetting any of the subtleties of FFTs? I've confirmed that I am measuring the amplitude spectrum by looking at reference sine waves, but I should be careful since I haven't worked with these in a while
It's late (I haven't been working on this all night, but I haven't gotten the chance to type this up until now), so thoughts on this problem will continue tomorrow morning..
| ||||||||||

| ||||||||||

function [spotM,r0,c0] = spotfind(M,level,rs,cs) %SPOTFIND Inputs a 3D array of hartmann spots and spot edge level %and outputs a subarray located around a single spot located near (rs,cs) cut=level/65535; A=double(M(:,:,1)).*double(im2bw(M(:,:,1),cut)); %start at (rs,cs) and sweep to find spot r=rs; c=cs; while A(r,c)==0 ... 34 more lines ... | ||||||||||

| ||||||||||

function [rc,cc] = singspotcent(A) %SINGSPOTCENT returns centroid location for first image in input 3D matrix MB=double(A(:,:,1)); [rn cn]=size(MB); M=MB-mean(mean(min(MB))); r=1; c=1; sumIc=0; sumIr=0; while c<(cn+1) ... 26 more lines ... | ||||||||||

| ||||||||||

function [topsum,botsum,leftsum,ritsum] = hemiadd(MB,rcd,ccd) %HEMIADD inputs a 3D image matrix and centroid location and finds the difference of %the sums of the top half, bottom half, left half and right half at each time %compared to their means over that time %round coordinates of centroid rc=round(rcd); cc=round(ccd); %subtract approximate background ... 51 more lines ... | ||||||||||

| ||||||||||

function [topsum,botsum,leftsum,ritsum] = edgeadd(MB,rcd,ccd,edgemax) %HEMIADD inputs a 3D image matrix and centroid location and finds the difference of %the sums of 3 edge pixels at radial distance "radial" from centroid for %the top half, bottom half, left half and right half at each time %compared to their means over that time %round coordinates of centroid rc=round(rcd); cc=round(ccd); ... 59 more lines ... | ||||||||||

| ||||||||||

function spotfft(t,b,l,r) %SPOTFFT Does an fft and plots the frequency spectrum of four input vectors %Specifically, this is to be used with halfspot_edgefluc to find the %frequencies of oscillations about the edges of Hartmann spots [n,m]=size(t); NFFT=2^nextpow2(n); T=fft(t,NFFT)/n; B=fft(b,NFFT)/n; L=fft(l,NFFT)/n; R=fft(r,NFFT)/n; ... 30 more lines ... | ||||||||||

| ||||||||||

function [top,bot,lft,rgt] = halfspot_fluc(M,spotr,spotc,thresh) %HALFSPOT_FLUC Inputs a 3D array of Hartmann sensor images, along with an %approximate spot location and intensity threshhold. Finds a spot on the %first image near (spotc,spotr) and defines boundary of spot near an %intensity of 'thresh'. Outputs fluctuations of the intensity sums of the %top, bottom, left and right halves of the spot about their means, and %graphs these against each other automatically. [I,r0,c0]=spotfind(M,thresh,spotr,spotc); [r,c]=singspotcent(I); ... 7 more lines ... | ||||||||||

| ||||||||||

function [top,bot,lft,rgt] = halfspot_edgefluc(M,spotr,spotc,thresh,plot) %HALFSPOT_FLUC Inputs a 3D array of Hartmann sensor images, along with an %approximate spot location and intensity threshhold. Finds a spot on the %first image near (spotc,spotr) and defines boundary of spot near an %intensity of 'thresh'. Outputs fluctuations of the intensity sums of the %top, bottom, left and right edges of the spot about their means, and %graphs these against each other automatically. % %For 'plot', specify 'time' for the time signal or 'fft' for the frequency ... 10 more lines ... |