Quantifying red in a recorded video
4 views (last 30 days)
Show older comments
Complete novice. I am looking to quantify the percentage area of red for each frame of a stored video. Any suggestions how I can do that? I am aware I will have to define "red" and would also appreciate any advice in this regard. Thank you!
0 Comments
Answers (2)
Ashutosh
on 1 Jun 2023
Hi,
You can use the VideoReader function to read a video file to MATLAB, and then use its various properties and object functions to access each frame individually as an image.
Then, for each frame, perform some preprocessing to bring all pixels down to a standard indication of redness, by subtracting the grayscale values from the red channel. Find the pixels that have Red intensity higher than a certain threshold value, and count these instances. Finally, find the percentage of the total number of pixels.
The below code should work:
vid = VideoReader('<video file location>');
redPixelCount = 0;
thresholdValue = 100;
frameCount = vid.NumFrames;
red = zeros(1,frameCount);
i=1;
while hasFrame(vid)
frame = readFrame(vid);
redChannel = imsubtract(frame(:,:,1), rgb2gray(frame));
redMask = redChannel > thresholdValue;
redPixelCount = sum(redMask(:));
redAreaPercent = (redPixelCount / numel(frame(:,:,1))) * 100;
red(i) = redAreaPercent;
i = i+1;
end
The thresholdValue is what may be used to define the "red", in your instance. From some trial and error, I found out that something between 90 and 160 should be fine.
Hope this helps!
0 Comments
Image Analyst
on 1 Jun 2023
See attached demo. I track a green Sharpie marker. You can easily adapt it to track something red in the video.
0 Comments
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!