I have tried the coding. But i don't understand what does mean idx = Igray == 0? Can someone explain it to me.
1 次查看(过去 30 天)
显示 更早的评论
if true
% code
endSeparate to RGB channel
Ir = imgcrop(:,:,1);
Ig = imgcrop(:,:,2);
Ib = imgcrop(:,:,3);
% Extract the background (black) region
Igray = rgb2gray(imgcrop);
idx = Igray == 0;
% Calculate average RGB of the region
Rave = uint8(mean(Ir(~idx)));
Gave = uint8(mean(Ig(~idx)));
Bave = uint8(mean(Ib(~idx)));
0 个评论
采纳的回答
Ameer Hamza
2018-5-12
This code is calculating the average of RGB channels while excluding the pixels where the intensity level is zero.
The line
idx = Igray == 0;
find all the pixels in grayscale image Igray, where the intensity is 0. It will return a logical matrix idx. Since only those pixels are required where intensity level is not 0, therefore we invert the logical matrix using ~idx,
Ir(~idx)
will return all the required pixels and then using mean() find the average. See Logical Indexing here.
4 个评论
Ameer Hamza
2018-5-12
编辑:Ameer Hamza
2018-5-12
As @Walter mentioned, mean() will do average along first nonscalar dimensions. In case of 2D matrix, it will average all the columns. Either use mean2() or convert to a single column before taking average like this
Rave = uint8(mean(Ir(:)));
Gave = uint8(mean(Ig(:)));
Bave = uint8(mean(Ib(:)));
disp([Rave,Gave,Bave]);
or take mean() twice
Rave = uint8(mean(mean(Ir)));
Gave = uint8(mean(mean(Ig)));
Bave = uint8(mean(mean(Ib)));
disp([Rave,Gave,Bave]);
all will produce same output.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Numeric Types 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!