Quantifying red in a recorded video
조회 수: 5 (최근 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!