最近做项目有要求,要在STM32F1上面实现颜色及基础图像的识别,所以用MATLAB做了个demo程序。
第一个需求是颜色识别,我在网上看的大部分都要将RGB空间转换成HSV/HSI空间来进行颜色识别,但是这样在F1这种最高主频只有72Mhz的单片机上跑实在是太慢了,所以就想直接在RGB空间进行颜色识别,这样的话就要分辨出R,G,B三个颜色分量对基本颜色的影响,所以我就写一个统计不同亮度下的红色来统计R,G,B三个颜色分量的影响。
第一步,制作素材,我用Windows自带的图片编辑软件制作了一个红色的色卡,共有16个不同亮度的红色,如上所示。
第二步,统计各种亮度的RGB三个分量
MATLAB代码如下:
clc;
clear;
Path="C:\Users\罗旭\Desktop\Color\mystepred.png";%图片路径
Source_img=imread(Path);%获取图片信息
[r,lie]=size(Source_img(:,:,2));%获取行列信息
read_l=20;%因为是自己制作的色卡,所以要选定某一行来读取信息,方便以后读取其它颜色的色卡
x=1:lie;
R_value=Source_img(read_l,:,1);%读取那一行的R分量
G_value=Source_img(read_l,:,2);%读取那一行的G分量
B_value=Source_img(read_l,:,3);%读取那一行的B分量
Gray_img&