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!
0 个评论
回答(2 个)
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.
Hope this helps!
0 个评论
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.
0 个评论
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!