Analysing Noisy Video for Approximating Radiation Dose on an Observation Baloon

2 visualizaciones (últimos 30 días)
Dear MATLAB community,
I'm an undergrad student in physics department. Currenty working on a project that requires analysing low res. noisy video that is recorded during night, on an observation baloon to estimate change in radiation relative to height of the baloon. Video quality is bad, at some parts video is tearing but generally, the tiny bright spots produced by radiation hitting the camera sensor is visible. There are few dead pixels in video, which their position between frames are not changing but their brigthness seem to change periodically. My progress so far,
  • I analysed the video frame by frame and estimated a threshold value for RGB layers.
  • Using threshold values, I generated a binary image.
  • I also used max. value limit for area of the connected pixels in order to reduce false counts caused by video tearing.
My current script is identifies particles in each frames and counts them. I have 2 main problems which I want to consult to the community. First one, as I plot the counts with respect to frames, there is nearly perfect periodic spikes in count numbers ( lasts for one frame). My opinion on this problem is this, because of the dead pixels registered as bright points, camera module constantly trying to adjusts its shutter speed in order to reduce bright spots on the frame. Peaks occuring when camera increases its shutter time. How can I reduce these spikes or how can I remove these spikes from data set? My second problem is how can I reduce noise in the video. Because my filter also in some frames identifies noise as particle.
Thanks in advance for all the help!
  5 comentarios
Richard Penrose
Richard Penrose el 15 de Dic. de 2020
Yes sir, camera is on the ballon looking into outer space, thanks for your suggestion I will try ANDing. And, what is your opinion on the count peaks? Do you think my opinion makes sense? Thank you so much!
Image Analyst
Image Analyst el 15 de Dic. de 2020
You don't need all that regionprops stuff unless you want the centroids or areas, and you don't need to do it twice (you could do it just once and ask for both of them in the same call). To count the spots, you can simply use bwlabel:
[labeledImage, numSpots] = bwlabel(Frame_Binary);
It doesn't look like you ever really use the centroid or area other than to count the blobs so there is no reason to call reginoprops().

Iniciar sesión para comentar.

Respuesta aceptada

Bjorn Gustavsson
Bjorn Gustavsson el 15 de Dic. de 2020
The way I understand your problem is that you're looking for variation in cosmic ray-flux with altitude? Or are you looking at some other kind of radiation?
First I suggest that you separate the frames with the different camera-settings. You might have to handle them separately. It would be interesting to have a look at one of those bright images too.
Your dead pixels are giving you zero or max intensity. The zero-pixels wont be of much problem for this count-rate exersice, provided they are few enough. The hot pixels you can find by AND-ing as suggested by Image Analyst, I tried a slightly different version:
P = (D1.*D2.*D3.*D4.*D5); % your images converted to gray-scale and then casted to double
[idx1,idx2] = find(P>0);
for i1 = 1:numel(idx1)
plot([D1(idx1(i1),idx2(i1)),...
D2(idx1(i1),idx2(i1)),...
D3(idx1(i1),idx2(i1)),...
D4(idx1(i1),idx2(i1)),...
D5(idx1(i1),idx2(i1))],'.-')
pause
end
From that small sample the intensities at pixels that are non-zero in all 5 images seems to vary as expected, indicating that you have no hot pixels. Since there are such a large number of pixels that are zero, it will be tricky to find dead pixels. You might try something like:
S = (D1 + D2 + D3 + D4 + D5);
imagesc(S==0)
Here it might be better to look at the bright images only, in them the dead pixels might stand out more clearly. For those images you might have some use for the Pixel2Pixel.m that estimates the photo-response-non-uniformity from image-sequences (designed for imaging of aurora and clouds where the typical gradients are smooth but in random directions).
For your research task I suggest you simply look at the histograms of the count-rates, perhaps something like this:
for i1 = n_imgs:-1:1
H(i1,:) = hist(ImStack(:,:,i1),0:255);
end
imagesc(log10(H))
That will give you the variation in the distribution of counts as a function of altitude (time). If you can separate the radiation of interest from background-radiation from other sources I cannot tell.
HTH
  4 comentarios
Bjorn Gustavsson
Bjorn Gustavsson el 15 de Dic. de 2020
Editada: Bjorn Gustavsson el 15 de Dic. de 2020
Well, the idea with calculating the histogram of the pixel-intensities for each image in your sequence (exactly how you do that depends on how many images you have from your data-sequene. I assumed that it was small enough to be kept in the 3-D array ImStack, but if you have too much data you might have to read in each image separately, or in chunks.) That would give you one 2-D array with the distribution of intensities for each image along the rows of H. That way you'll get the time-variation in the y-direction and the pixel-intensities (0-255) in the x-direction. Since most pixels have zero intensity the first bin of the histogram will have much larger count-level. To level out the colour-axis it might be preferable to use log-scale.
(I have surely messed up the notation here with multiple use of count, count-rate for both the image-intensity (meaning photon and particle count-rate) and count-rate for the histogram (meaning the number of pixels in an image with a specific intensity. Have a look at the help, demo and examples for hist, and histogram) The idea is to scrap the spatial information about the radiation and retain the information about the distribution of intensities at each time-step. Since the images didn't seem to contain that much "image"-information and the question/objective seemed to ask for an in-depth look at the distribution of intensities that seemed to be the way to go. For a next-step you could have a look at ksdensity to try to fit smoother distributions to the count-rates.)
My pleasure.
HTH
Richard Penrose
Richard Penrose el 15 de Dic. de 2020
Thank you sir for you time and detailed answer, it helped a lot!

Iniciar sesión para comentar.

Más respuestas (0)

Productos


Versión

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by