【毕设】通过RGB识别红外图像火点(matlab)

红外热像仪与激光雷达联合标定后将获得投影矩阵,在数据融合前后点云投影前后有对应关系,通过此关系就可以实现通过RGB值寻找到火点后找到对应的雷达点坐标,有很多不足之处,权当回忆吧!!!
通过RGB识别火点

clc

e=0.5;%控制精度0.5,1
k=0.5;

%/
% 输入所要查找的的RGB值
%138未发现火点,137输出
% r_value =30; %603,149等%138未发现火点
% g_value =33;
% b_value =42;
% 
% r_value =5; %红色26,0,0
% g_value =5; %白5,5,5
% b_value =5;

%打开图片//
img = imread( 'G:\BiYeSheJi\matlab\0000000138.png' );%打开图片
figure('Position',[20 200 size(img,2) size(img,1)]);%设置窗格显示
axes('Position',[0 0 1 1]);%创建坐标图,定义图形位置和大小,[left bottom width height]
imshow(img,[]);
s=size(img);
%disp(img)
hold on;%当前图层设为背景

%//
put=questdlg('输入像素坐标还是RGB','火点定位方式','像素','RGB','close','像素');%新建窗口对话框提示
     switch put
         case '像素'
             int=inputdlg({'X=','Y='},'请输入',[1 30;1 30]);
             str=[str2double(int{1}) str2double(int{2})];
             m=str(1,2);
             n=str(1,1);
             K=[m,n];
         case 'RGB'
             int=inputdlg({'R=','G=','B='},'请输入',[1 30;1 30;1 30]);%输入窗口
             str=[str2double(int{1}) str2double(int{2}) str2double(int{3})];
             r_value =str(1,1); % 将数值数组转换为表示数字的字符数组
             g_value =str(1,2);
             b_value =str(1,3);
             r = img(:, :, 1);
             g = img(:, :, 2);
             b = img(:, :, 3);
             index_r = (r == r_value);
             index_g = (g == g_value);
             index_b = (b == b_value);
             index = index_r & index_g & index_b;
             [m,n] = find(index==1);
             K=[m,n];%疑似火点的所有像素点
         case 'close'
             clc
             close all 
     end

% %RGB输入窗口//
% int=inputdlg({'R=','G=','B='},'请输入',[1 30;1 30;1 30]);%输入窗口
% str=[str2double(int{1}) str2double(int{2}) str2double(int{3})];
% r_value =str(1,1); % 将数值数组转换为表示数字的字符数组
% g_value =str(1,2);
% b_value =str(1,3);
% %
% % image 的r, g, b三个分量图像
% r = img(:, :, 1);
% g = img(:, :, 2);
% b = img(:, :, 3);
% % 标示出图像image中红色点的位置为1,其它点为0,结果存放在index中
% index_r = (r == r_value);
% index_g = (g == g_value);
% index_b = (b == b_value);
% index = index_r & index_g & index_b;
% % 最终的指定RGB点位置(x, y)坐标((r == r_value)&(g == g_value)&(b == b_value))
% [m,n] = find(index==1);
% K=[m,n];%疑似火点的所有像素点
A=K;
size(K,1);

%/
%%打开原始txt数据
T=importdata('G:\BiYeSheJi\matlab\velo.txt');
%打开投影后的txt数据
F=importdata('G:\BiYeSheJi\matlab\velo_img.txt');
 
%
u=0;
if(size(K,1)~=0)%K不为空矩阵时说明存在火点
  for j=1:size(K,1)
    x=K(j,2);
    y=K(j,1);
    g=0;
   for i=1:size(T,1)
     if(((x-e)<=F(i,1))&&(F(i,1)<(x+e)))%(x-e)<=F(i,1)&&F(i,1)<(x+e)
         if(((y-e)<=F(i,2))&&(F(i,2)<(y+e)))
            u=u+1;
            g=1;
            fprintf('%f %f %f %d\n',T(i,1),T(i,2),T(i,3),i);%原始点云数据
            plot(x,y,'o','LineWidth',4,'MarkerSize',1 );%画点
            %说明性文字num2str,XYZ坐标
            str=[num2str(T(i,1)') num2str(T(i,2)') num2str(T(i,3)')];
            text(x,y,cellstr(str),'color','white')%显示字符串
            
         end
      end
   end
    if(g==1)
        A(j,:)=[];%清空该行
    end
  end
  %///
 %disp(A)
  if(u~=size(K,1))
     fprintf('存在未扫描到的火点\n') %存在火点,但是激光雷达未扫描到
     %msgbox('未扫描到火点位置','提示信息')
     button=questdlg('存在未扫描到的火点,点击No结束,点击continue扩大扫描范围','警告','Yes','No','continue','Yes');%新建窗口对话框提示
     switch button
         case 'yes'
         case 'No'
              close all
         case 'continue'
         %///
         %///
             h=e+k;
             v=0;
             for j=1:size(A,1)
                 x=A(j,2);
                 y=A(j,1);
                 for i=1:size(T,1)
                    if ((x-h)<=F(i,1)&&F(i,1)<(x+h))
                       if((y-h)<=F(i,2)&&F(i,2)<(y+h))
                          v=v+1;
                          fprintf('%f %f %f %d\n',T(i,1),T(i,2),T(i,3),i);%原始点云数据
                          plot(x,y,'o','LineWidth',4,'MarkerSize',1 );%画点
                          str=[ num2str(T(i,1)') num2str(T(i,2)') num2str(T(i,3)')];%将数字转为字符串
                          text(x,y,cellstr(str),'color','white')%显示字符串
                       end 
                    end 
                 end  
             end
             if(v==0)
                 questdlg('仍然未扫描到火点','警告','结束','结束')
                 close all
             else
                 questdlg('扫描结束','提示','Yes','Yes')
             end     
     end
  else
      questdlg('扫描结束','提示','Yes','Yes');%新建窗口对话框提示
  end 
else
    fprintf('未发现火点\n')
    %msgbox('未发现火点','提示信息')
    questdlg('未发现火点','提示','确定','确定')%新建窗口对话框提示
    close all
end

在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值