Borrar filtros
Borrar filtros

Averaging in a loop to stop uint16 from saturating

2 visualizaciones (últimos 30 días)
Robert Roy
Robert Roy el 8 de Mayo de 2016
Comentada: Image Analyst el 8 de Mayo de 2016
Hi guys, I am doing some image processing, and what happens is I record a number of images,store them in a set and do some processing and then average for a number of sets recorded.However I have a problem where because the images are uint16 it saturates before imaging, I am just wondering if there is a way to average as I go along or any other way round this. Ive tried to change the type to a larger uint but that doesnt seem to work.
if true
for n=1:10
stem='E:\29th April New\NEW Gain=99_No Delay_ Gate=0.02_0';
r=n-1;
r=int2str(r);
combinedStr=strcat(stem,r);
Images=99;
t=10;
AvgImg = uint16(zeros(1024,1280));
for i=t:Images
B=readimx(fullfile(combinedStr,['B000',int2str(i),'.im7']));
C=B.Frames{1}.Components{1};
V = C.Planes;
Img = V{1,1};
J = imrotate(Img,-90);
I2 =(flip(J,2));
FUNC=@(x)max(x(:));
I3=medfilt2(I2,[1 1]);
AvgImg = AvgImg +I3;
end
AverageImg = AvgImg/(Images-t);
AverageImgB=90;
AverageImgLII=(AverageImg-AverageImgB);
K=imagesc(flipud(AverageImgLII));
end

Respuesta aceptada

Image Analyst
Image Analyst el 8 de Mayo de 2016
It needs to be double to avoid clipping
AvgImg = zeros(1024,1280); % Before the loop
AvgImg = AvgImg + double(I3); % In the loop
  2 comentarios
Robert Roy
Robert Roy el 8 de Mayo de 2016
That seems like it helps but now my colorscale seems to be off especially with the background of the image.
Image Analyst
Image Analyst el 8 de Mayo de 2016
You can send in different values to caxis(). Or you can use [] if it's a gray scale image
imshow(AvgImg, []);
colormap(gray(256));
colorbar;

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by