Quantifying red in a recorded video

1 次查看(过去 30 天)
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!

回答(2 个)

Ashutosh
Ashutosh 2023-6-1
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.
You read more about the Image Processing functions in the MATLAB documentation.
Hope this helps!

Image Analyst
Image Analyst 2023-6-1
See attached demo. I track a green Sharpie marker. You can easily adapt it to track something red in the video.

产品

Community Treasure Hunt

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

Start Hunting!

Translated by