最近,遇到了一个问题,我师兄的深度学习代码成功的将荞麦种子分为了三类。将左图转换为了右图,将图中的黑色,灰色,白色而且形状不一的荞麦种子分为了3类。

我要做的就是,分别将右边图中红色的部分、黄色的部分、绿色的部分筛选出来进行处理。这对于初次接触科研的我来说算是一个第一个难题了。那么我的检索关键词就是,颜色变换,经过调研,我发现,用其他颜色空间(例如rgb颜色空间)是不现实的,因为它的感觉是不符合我们人眼观察的感觉的,因此,我们人眼可以直接观察出来的不同,必须选择符合我们人眼的颜色空间,经过筛选,我们选择了HSV颜色空间。

那么我们的思路就是第一步:将图片转换成HSV空间,方便进一步处理。这一步在matlab中用rgb2hsv这个命令可以轻松的做到。

第二步 就是,知道图片中不同的颜色的H、S、V值,这里,我们需要知道右图中的红黄蓝(还有背景的黑色)的H,S,V值,然后才能根据这三个值对目标像素进行筛选。这里,我们大概了解一下,hsv这三个值大概代表色调,饱和度,亮度。所以大概猜测一下,他们的H值将会是差异最大的。

但是,找到某个像素点的HSV值也费了一点功夫,按照网上说的,直接用PS打开,用拾色器拾取某个地方的HSV值,得到下图

将其值带入我们的代码没有成功将目标图像筛选出来。因此,猜想是,这个H的单位是度。S和V是百分比,跟我们需要的不一样,而且,在后面,我们发现在opencv中求取hsv值,用的三个数也有不同,在这里先挖个坑,后续还会用c++实现颜色变换。

最后,我们将目标颜色截取成一个一个小块如下图,是为了方便带入图片,读取hsv值。

将目标图像读入下面matlab代码之中。

clear all;
clc;
I = imread( 'hong.png' );
hsv = rgb2hsv( I );
H = hsv( :, :, 1 );
S = hsv( :, :, 2 );
V = hsv( :, :, 3 );

注意(这里,我们的目标图像最好是颜色一致的,否则之后的表格之中需要自己一一对应hsv值)

就这么一个简单的代码,就可以得到他们的hsv值

这里我们以他的S值为例,不同的表格,代表不同的像素,如果颜色不均匀,那么表格中的数字将会不同,由于我们用的是一个颜色,所以,他们每个表格的数字是相同的。(这里我猜想,如果表格的位置是相同的,即他们在表格中都是第一行第一列的,那么他们是同一个像素的hsv值,这里hsv分别有三个表格)

根据我们的目标图像,我们得到了三种颜色的HSV值:

红:h:0,s:0.9922,v:0.5020

绿:h:0.3333,s:0.9922v:0.5020

黄:h:0.1667s:0.9922v:0.5020

然后,将原图带入下面的颜色提取的代码中,这里我们以红色为例:

clear all;
clc;
flag = imread('F:\zhanlian\jieguo\20.png'); % 读取图像
figure;
imshow(flag); % 展示图像
% 将图像的rgb色彩空间转化至hsv色彩空间
flag_hsv = rgb2hsv(flag);
% 创建一个黑色图像,将特定颜色提取到此处
flag_new = 0*ones(size(flag));
% 将该图像转至hsv色彩空间
flag_new_hsv = rgb2hsv(flag_new);
% 找出图像中绿色的像素
[row, col] = ind2sub(size(flag_hsv),find(flag_hsv(:,:,1)<0.1...
& flag_hsv(:,:,2)>0.9 & flag_hsv(:,:,2)<1.1...
& flag_hsv(:,:,3)>0.49& flag_hsv(:,:,3)<0.51));
flag_hsv(:,:,1)=0;
flag_hsv(:,:,2)=0;
flag_hsv(:,:,3)=1% 将图像中的绿色像素复制到刚才新建的白色图像中
for i = 1 : length(row)flag_new_hsv(row(i),col(i),:) = flag_hsv(row(i),col(i),:);end
% 将提取出来的绿色,转化至rgb空间,进行展示
flag_green = hsv2rgb(flag_new_hsv);
figure
imshow(flag_green)

其中,中间这块代码,需要根据你测量出来的HSV值进行更改,

[row, col] = ind2sub(size(flag_hsv),find(flag_hsv(:,:,1)<0.1...
& flag_hsv(:,:,2)>0.9 & flag_hsv(:,:,2)<1.1...
& flag_hsv(:,:,3)>0.49& flag_hsv(:,:,3)<0.51));
flag_hsv(:,:,1)=0;
flag_hsv(:,:,2)=0;
flag_hsv(:,:,3)=1

其中,flag_hsv(:,:,1)代表H值

flag_hsv(:,:,2)代表S值

flag_hsv(:,:,3)代表V值,

由于红色的H是0,我们设置的是小于0.1,通过实验,我们发现这里的判断部分只能是大于或者小于号,而且只能是约束的数字只能是小数,根据0<0.1,0.9<0.9922<1,0.49<0.5020<0.51我们写出了上图的代码。你可以根据自己的需要进行修改。

根据我们的实验,我们得到了如下的结果,成功将三种颜色的东西分开。

今天的任务就完成了,下一篇写用opencv提取不同的颜色

利用matlab对彩色图片进行颜色变换相关推荐

  1. matlab图片拼接变成白的,利用matlab实现对图片的拼接

    利用matlab实现对图片的拼接 (图像处理的课堂小作业,简单地手打代码,有问题请联系) 1.效果图 (先看效果图,后思考怎么实现) 原图: 简单拼接: 再进一步操作,加了线: 2.原理 1.matl ...

  2. 利用matlab实现对图片的拼接

    利用matlab实现对图片的拼接 (图像处理的课堂小作业,简单地手打代码,有问题请联系) 1.效果图 (先看效果图,后思考怎么实现) 原图: 简单拼接: 再进一步操作,加了线: 2.原理 1.matl ...

  3. MATLAB转化彩色图片为灰度图片命令行窗口代码:

    转化彩色图片为灰度图片命令行窗口代码: >> imread docia.png   %打开图片 docia.png >> whos  %显示当前变量,发现产生临时变量ans,里 ...

  4. 颜色矩特征提取matlab,求matlab彩色图片的颜色特征提取算法的代码,和纹理特征提取的? 爱问知识人...

    其实学数字图像处理,关键的不是源代码(和一般编程还是有区别的,这个是经验之谈,其实一般博导未必会编程,但是你和他说说你的方法,他一般都能切中要害),而是你能理解基于概念及适用场所. 基于颜色.纹理.形 ...

  5. 利用matlab写一个简单的拉普拉斯变换提取图像边缘

    可以证明,最简单的各向同性微分算子是拉普拉斯算子.一个二维图像函数 f(x,y) 的拉普拉斯算子定义为 其中,在 x 方向可近似为 同理,在 y 方向上可近似为 于是 我们得到满足以上三个公式的两个变 ...

  6. matlab实现PS算法之颜色变换、高反差保留、染色玻璃、碎片

    %{ 设置好条纹的宽度和条纹的间隔,建立一个 遮罩层,等间隔的对原图进行等间距的遮罩. %} clear,clc; [filename,pathname] = uigetfile('*.jpg;*.b ...

  7. 【机器学习线性代数】17 利用SVD进行彩色图片压缩

    这一节,我们再来介绍一个奇异值分解的实际案例:即如何基于SVD的主成分分析方法,来对一张彩色图像进行压缩处理. 1.图像的数据表示 很明显,如果要对一张图像进行压缩,首先我们得知道应该如何用数据的形式 ...

  8. 如何用matlab将彩色图片转为单通道绿色图片

    image = imread('ima.jpg'); imager = image(:,:,1);%红 imageg = image(:,:,2);%绿 imageb = image(:,:,3);% ...

  9. 利用matlab自带函数快速提取二值图像的图像边缘 bwperim函数

    clear all;close all;clc; I = imread('rice.png'); I = im2bw(I); J = bwperim(I); % 提取二值图像图像边缘 figure; ...

最新文章

  1. win10打开本机telnet客户端
  2. 【论文投稿】计算机学科部分核心期刊投稿攻略
  3. [深度学习] 自然语言处理 --- 基于Attention机制的Bi-LSTM文本分类
  4. numpy zeros矩阵_零矩阵使用numpy.zeros()| 使用Python的线性代数
  5. easyui的因为url名和视图名相同出现上面的异常。
  6. 嵌入式linux下网卡设备驱动与网络协议栈的设计实现.pdf,嵌入式系统的通用网络驱动模型设计与实现.pdf...
  7. java 路径中代替斜杠_老生常谈java路径中的反斜杠和斜杠的区别
  8. python里w_python vs pythonw | 学步园
  9. css鼠标拖拉卡顿_66个值得收藏的CSS开发技巧
  10. python之深浅copy与id
  11. 在MFC中使用GDI+的一般方法,以VC6.0编译器为例
  12. 带着梦想,追逐属于你我的那份真彩
  13. Spring源码浅析之配置文件解析(一)
  14. 磨刀室-文本编辑之全面接触PDF:最好用的PDF软件汇总(转)
  15. QQ空间自动发广告说说?可能是激活工具附带的独狼Rootkit!
  16. matlab之图例legend的数字变量显示
  17. 阿里巴巴 Alibaba
  18. 【统计学】基本Stata使用手册(1):基本操作
  19. linux下查看文件内容工具
  20. 直接下载docker镜像包

热门文章

  1. C++中析构函数的作用
  2. FPGA知识汇集-时钟系统的移植
  3. restTemplate loadbalance 负载均衡使用demo 案例 原理以及全网最细源码解析
  4. 【饭谈】细嗦那些职场中喜欢用领导口气命令别人的同事
  5. 更改repo的python版本
  6. 《手腕光电容积图智能手表对房颤检测的录制长度和其他心律失常的影响》阅读笔记
  7. 华为手机无法获取cookie (uniapp) SameSite
  8. Vue子组件向父组件传值
  9. FLARToolKit入门教程
  10. Labview数组函数