Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
识别图像中的红色&;然后用Matlab与其他图像进行比较_Matlab_Image Processing_Rgb - Fatal编程技术网

识别图像中的红色&;然后用Matlab与其他图像进行比较

识别图像中的红色&;然后用Matlab与其他图像进行比较,matlab,image-processing,rgb,Matlab,Image Processing,Rgb,我想识别图像中的红色,然后将该值与另一图像中的红色进行比较。我对Matlab很陌生,没有图像处理知识。然而,我一直在尝试一些随机技术来做到这一点。到目前为止,我已经使用了单个图像的RGB通道直方图,并且还比较了单个图像中RGB通道的平均数值。不幸的是,我在这两种情况下看到了几乎相似的结果,并且无法识别红色较少和红色较多的图像之间的差异 我也随机尝试过灰度直方图,但发现没用 (来源:) (来源:) 另外,我在这个论坛上搜索,试图找到一个类似的问题,但我没有找到任何可以帮助我的。 我需要的是:

我想识别图像中的红色,然后将该值与另一图像中的红色进行比较。我对Matlab很陌生,没有图像处理知识。然而,我一直在尝试一些随机技术来做到这一点。到目前为止,我已经使用了单个图像的RGB通道直方图,并且还比较了单个图像中RGB通道的平均数值。不幸的是,我在这两种情况下看到了几乎相似的结果,并且无法识别红色较少和红色较多的图像之间的差异

我也随机尝试过灰度直方图,但发现没用


(来源:)

(来源:)

另外,我在这个论坛上搜索,试图找到一个类似的问题,但我没有找到任何可以帮助我的。 我需要的是: A.哪种技术可以用来检查图像的红色? B我能在那里帮忙吗

%-------------------------------------------
%For histograms of all 3 RGB channels in an image

i = imread('<Path>\a7.png');
imgr = i(:,:,1);
imgg = i(:,:,2);
imgb = i(:,:,3);
histr = hist(imgr(:), bins);
histg = hist(imgg(:), bins);
histb = hist(imgb(:), bins);
hfinal = [histr(:); histg(:); histb(:)];
plot(bins, histr);


%-------------------------------------------
%To compare mean values of R channels of all images

clear all; 
%read all images in a sequence
flist=dir('<Path>\*.png');

for p = 1:length(flist)
    for q = 1 : 3
    fread = strcat('<Path>\',flist(p).name);
    im = imread(fread);
    meanim(p,q) = mean2(im(:,:,q));
    end
end

%disp(meanim);
rm = meanim(:,1);
frm = sum(rm(:));
gm = meanim(:,2);
fgm = sum(gm(:));
bm = meanim(:,3);
fbm = sum(bm(:));

figure();
set(0,'DefaultAxesColorOrder',[1 0 0;0 1 0;0 0 1]);
pall = [rm(:), gm(:), bm(:)];
plot(pall);
title('Mean values of R, G and B in 12 images');
leg1 = legend('Red','Green','Blue', ...
                'Location','Best');
print (gcf, '-dbmp', 'rgbchannels.bmp') 

sm = sum(meanim);
fsum = sum(sm(:));

% disp(fsum);

f2 = figure(2);
set(f2, 'Name','Average Values');
t = uitable('Parent', f2, 'Position', [20 20 520 380]);
set(t, 'ColumnName', {'Average R', 'Average G', 'Average B'});
set(t, 'Data', pall);
print (gcf, '-dbmp', 'rgbtable.bmp') ;

rgbratio = rm ./ fsum;
disp(rgbratio);

f3 = figure(3);
aind = 1:6;
hold on;
subplot(1,2,1);
plot(rgbratio(aind),'r+');
title('Plot of anemic images - having more pallor');

nind = 7:12;
subplot(1,2,2);
plot(rgbratio(nind),'b.');
title('Plot of non anemic images - having less pallor');
hold off;
print (gcf, '-dbmp', 'anemicpics.bmp');
%-------------------------------------------
%用于图像中所有3个RGB通道的直方图
i=imread('\a7.png');
imgr=i(:,:,1);
imgg=i(:,:,2);
imgb=i(:,:,3);
histr=hist(imgr(:),箱);
histg=hist(imgg(:),箱子);
histb=hist(imgb(:),bins);
hfinal=[histr(:);histg(:);histb(:)];
地块(垃圾箱、历史记录);
%-------------------------------------------
%比较所有图像R通道的平均值
清除所有;
%按顺序读取所有图像
flist=dir('\*.png');
对于p=1:长度(flist)
对于q=1:3
fread=strcat('\',flist(p).name);
im=imread(fread);
均值(p,q)=均值2(im(:,:,q));
结束
结束
%disp(meanim);
rm=平均值(:,1);
frm=总和(rm(:);
gm=平均值(:,2);
fgm=总和(gm(:);
bm=平均值(:,3);
fbm=总和(bm(:);
图();
集合(0,'DefaultAxeColorder',[10;01;01]);
帕尔=[rm(:)、gm(:)、bm(:)];
图(pall);
标题(“12幅图像中R、G和B的平均值”);
leg1=图例('红色','绿色','蓝色'。。。
“位置”、“最佳”);
打印(gcf、-dbmp、'rgbchannels.bmp')
sm=总和(平均值);
fsum=总和(sm(:);
%disp(fsum);
f2=图(2);
集合(f2,‘名称’,‘平均值’);
t=uitable('Parent',f2,'Position',[20 20 520 380]);
集合(t,'ColumnName',{'Average R','Average G','Average B'});
集合(t,‘数据’,pall);
打印(gcf,'-dbmp',rgbtable.bmp');
rgbratio=rm./fsum;
disp(rgbratio);
f3=图(3);
aind=1:6;
等等
子批次(1,2,1);
绘图(rgbratio(aind),'r+');
标题(“贫血图像图-更苍白”);
nind=7:12;
子批次(1,2,2);
地块(rgbratio(nind),‘b’);
标题(“非贫血图像图-苍白程度较低”);
拖延;
打印(gcf,'-dbmp,'-anemicpics.bmp');

您不能假设红色通道本身与像素的红色相同。像素的红色度的良好估计可通过如下方式实现:

redness = max(0, red - (blue + green) / 2);
其中,红色、绿色和蓝色是图像中不同RGB通道的值。
计算图像的该值后,您可以通过一些方法(如平均值或直方图)来估计图像的红色度。

对不起,我没有完全了解“图像中不同RGB通道的值”。它是否像图像中所有像素的R、G和B的平均值一样?不,红色、绿色和蓝色与您自己的代码中的imgr、imgg和imgb完全相同。祝你好运谢谢你,大卫。这里有两个链接:我只需要结膜(内眼睑)的裁剪图像,而不是整个眼睛的图像。好了。那些照片真是令人毛骨悚然!对不起,我不知道如何裁剪图片。您可能对我刚才为您编写的一些代码感兴趣。经过一些尝试和错误,我发现
redness=max(0,r-(max(g,b)+abs(g-b))
给出了相当好的结果。