判断颜色信息-RGB2HSV

前言

项目车号识别过程中,车体有三种颜色黑车黑底白字、红车红底白字、绿车黄底绿字,可以通过判断车体的颜色信息,从而判断二值化是否需要反转,主要是基于rgb2hsv函数进行不同颜色的阈值判断。

MATLAB代码如下:

% /************************************************************************
% * Copyright(c) 2017  ZRJ
% * All rights reserved.
% *
% * File:	isGreen.m
% * Brief: 车号区域颜色信息判断算法
% * Version: 1.0
% * Author: ZRJ
% * Email: happyamyhope@163.com
% * Date:	2017/03/28
% * Reference:
% * History:
% * 20170328:得到ROI的颜色信息;
%
% ************************************************************************/
function  [ ] = isGreen( )
%程序功能:车号区域颜色信息判断算法;
%输入input:
%    roi --  roi color image;
%输出output:
%    flip  --  flip flag;

roi = 'E:\carriage_recognition\train_identification\ROI1095\'; 
roi_path = [roi,'ROI原图\'];
roi_format = '*.png'; 
roi_list = dir(strcat(roi_path, roi_format));
roi_num = length(roi_list);%获取图像总数量

for num = 1 : roi_num %逐一读取图像
%     num
    close all
    % HSV颜色信息提取
%     roi_name = roi_list(num).name;% 图像名
%     roi_image =  imread(strcat(roi_path, roi_name));%读取图像
    roi_name = [int2str(num), '_number_ROI.png'];
    roi_image = imread([roi_path, roi_name]);
    %RGB2HSV of ROI
    hsv_f = rgb2hsv(roi_image);
    H = hsv_f(:,:,1)*180;
    S = hsv_f(:,:,2)*255;
    V = hsv_f(:,:,3)*255;
    [y,x,z]=size(roi_image);
    green = 0;
    yellow = 0;
    for i=1:y
        for j=1:x
            if(((H(i,j)>=40)&&(H(i,j)<=75)) && (S(i,j)>=60)&&(S(i,j)<=255) && (V(i,j)>=55)&&(V(i,j)<=255))  
                green = green + 1;%绿像素点统计
            elseif(((H(i,j)>=27)&&(H(i,j,1)<=33)) &&(S(i,j)>=60)&&(S(i,j)<=255) && (V(i,j)>=80)&&(V(i,j)<=255)) 
                yellow = yellow + 1;%黄像素点统计
            end
        end
    end
    
    ss = x * y;
    ratio_g = green *100/ ss;
    ratio = (green + yellow) *100/ ss;
    flip = 0;
    if( ratio > 0.04 && ratio_g > 0.0004 )
        flip = 1;
    end
    
    if ( flip )
        bw_name = [roi_name(1: end-4), '_flip'];
        imwrite(roi_image, [roi, 'green\', bw_name,'.png']);
    end
   
end % end for 

end % end function

问题总结:

1.注意不同颜色H/S/V的范围,可以根据实际情况设置;

2.matlab自带的rgb2hsv函数的输出范围是[0 1];

3.判断是否反转的阈值需要根据具体的情况进行设定;

转载于:https://www.cnblogs.com/happyamyhope/p/6650920.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值