matlab 图像矩阵条件提取方法

用matlab如何实现:
已知一个图像矩阵A和某一点的颜色(R0,G0,B0) 怎样把A中 R,G,B分量均在R0,G0,B0的 0.80~1.20倍之间的像素提取到矩阵B中?

在处理矩阵A时要先确保A已转为double型。显示B时还要转换为uint8型。我举一个例子吧,我先读取一个名为111.bmp的图像

I=imread('C:\Users\DELL\Desktop\111.bmp');

A=double(I);                          %转为double型

R0=2;                                   %比方说已知的R0,G0,B0分别为2,59,182。

G0=59;

B0=182;

 [M,N,H]=size(A);                   %获取A的大小。

B=zeros(M,N,H);                   %新建一个同样大小零矩阵B。

for n=1:N

       for m=1:M

           r=A(m,n,1);               %将此像素的R分量赋给r。

           g=A(m,n,2);              %将此像素的G分量赋给g。

           b=A(m,n,3);              %将此像素的B分量赋给b。

           if (r>=0.8*R0&&r<=1.2*R0)&&(g>=0.8*G0&&g<=1.2*G0)&&(b>=0.8*B0&&b<=1.2*B0)

           B(m,n,1)=A(m,n,1);   %判断完之后将A中此像素的各分量赋给B。

           B(m,n,2)=A(m,n,2);

           B(m,n,3)=A(m,n,3);

           end;

       end;

end;

NI=uint8(B);                     %将B转为uint8型,并赋给NI。

imshow(I);                       %显示原图像

imshow(NI);                      %显示处理后的图像

图像位处理前与处理后的图片。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-06
  A %原矩阵
  B=A(1:10,1:10); %第一行到第十行第一行到第十列的子矩阵
  C=A(10:100,20:300); %第十行到第一百行第二十列到第三百列的子矩阵
  f=imread('car_2.bmp'); % 读取图像;
  [x,y]=size(f); % x,y为图像的行数和列数;
  m=20;n=30; % 手动定义子图像的行数和列数;
  s=zeros(m,n); % s表示子矩阵;
  t=zeros(10,10); % t为阈值矩阵;
  rx=1:m:x;
  cy=1:n:y; % rx和cy是子图像左上角的坐标;
  rowhigh=rx+m-1; % rowhigh和colhigh是子图像历遍的终点,即为右下角的坐标;
  colhigh=cy+n-1;
  for r=1:10
  for c=1:10
  s=f(rx(r):rowhigh(r),cy(c):colhigh(c));
  t(r,c)=graythresh(s); % 用Otsu算法求每幅子图像的最佳阈值,保存在阈值矩阵t中;
  end
  I=imresize(t,[x,y]); % 插值后的阈值矩阵I与原图像的行数和列数相等;
  I=reshape(I,(size(f)));%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  H=f>I; % 将阈值矩阵与图像矩阵比较,将亮的部分提取出来;
  g=H*255;
  figure(1);
  imshow(f);title('原始图像') % 显示原图像;
  figure(2);
  imshow(g);title('处理结果') % 显示处理后的结果;
相似回答