判断颜色信息-RGB2HSV
前言
项目车号识别过程中,车体有三种颜色黑车黑底白字、红车红底白字、绿车黄底绿字,可以通过判断车体的颜色信息,从而判断二值化是否需要反转,主要是基于rgb2hsv函数进行不同颜色的阈值判断。
MATLAB代码如下:
% /************************************************************************ % * Copyright(c) 2017 ZRJ % * All rights reserved. % * % * File: isGreen.m % * Brief: 车号区域颜色信息判断算法 % * Version: 1.0 % * Author: ZRJ % * Email: [email protected] % * 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.判断是否反转的阈值需要根据具体的情况进行设定;
完