How to sum up about 3-4 color frames and only show the brightest frame. Matlab
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Marqual Brown
el 27 de Sept. de 2017
Comentada: Walter Roberson
el 29 de Sept. de 2017
obj = VideoReader('C:\Users\Robotics\Pictures\Saved Pictures\Lightfile\Prelight.MOV');
for img = 1:obj.NumberOfFrames;
filename = strcat('frame',num2str(img),'.jpg');
b = read(obj,img);
imwrite(b,filename);
end
I have this code that reads the file and get all frames, but I need it to sum up about 3-5 frames then take the brightest frame and store it. Can someone help please!!
2 comentarios
OCDER
el 27 de Sept. de 2017
Editada: OCDER
el 27 de Sept. de 2017
Can you explain what you mean to "sum up 3-5 frames and take the brightest frame"? The sum of 3-5 frames will always be the brightest frame.
Since an image is a matrix, you can simply add images together using matrix math, but use double format (im2double) so that the sum of 3-5 images doesn't exceed the maximum value given a number format (ex: uint8 max value is 255). Rescale all image intensities at the end to prevent flickering effects by inconsistent rescaling.
Respuesta aceptada
Walter Roberson
el 27 de Sept. de 2017
Editada: Walter Roberson
el 28 de Sept. de 2017
The below code assumes that the frames are RGB.
The below code does not attempt to detect intervals of flash and determine the best out of the interval: it takes the frames frames_per_group at a time and determines the brightest of that group.
obj = VideoReader('C:\Users\Robotics\Pictures\Saved Pictures\Lightfile\Prelight.MOV');
frameidx = 0;
frames_per_group = 5;
frame_history = [];
frameidx_history = [];
while hasFrame(obj)
frameidx = frameidx + 1;
groupidx = groupidx + 1;
b = readFrame(obj);
frame_history = cat(4, frame_history, b);
frameidx_history(end+1) = frameidx;
if size(frame_history, 4) == frames_per_group
maxbrightness = -inf;
maxbrightnessidx = -inf;
for K = 1 : frame_per_group;
grayframe = rgb2gray(frame_history(:,:,:,K));
thisbrightness = sum(grayframe(:));
if thisbrightness > maxbrightness
maxbrightness = thisbrightness;
maxbrightnessidx = K;
end
end
bestframe = frame_history(:,:,:,maxbrightnessidx);
bestframeidx = frameidx_history(maxbrightnessidx);
filename = sprintf('frame%04d.jpg', bestframeidx);
imwrite(bestframe, filename);
frame_history = [];
frameidx_history = [];
end
end
(Code not tested)
8 comentarios
Walter Roberson
el 29 de Sept. de 2017
I do not know how a 360 degree camera might differ from a regular camera ? Is it just like a fish-eye lens with a single image, or is it multiple images at the same time?
Más respuestas (0)
Ver también
Categorías
Más información sobre Camera Calibration 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!