使用MATLAB进行图片的处理十分方便,看它的名字就知道了,矩阵实验室(matrix laboratory)。一副图片的像素数据可以看成是一个二维数组一个大矩阵,MTABLAB就是为矩阵运算而生。

  MATLAB对于图像处理中有丰富的函数,最简单的RGB转Gray只需要一个函数rgb2gray()即可完成。但是如果光是这样学习图像处理,是没有多大意义的,所以博主决定自己根据原理用MATLAB实现一些图像处理的基础算法。作为使用FPGA实现各种图像处理算法的前期仿真,以便后期进行结果对比。顺便记录一些MATLAB在图像处理中的常用代码和函数。

  将彩色图像转化为灰度的方法有两种,一个是令RGB三个分量的数值相等,输出后便可以得到灰度图像,另一种是转化为YCbCr格式,将Y分量提取出来,YCbCr格式中的Y分量表示的是图像的亮度和浓度所以只输出Y分量,得到的图像就是灰度图像了。我在这里选择第二种方法实现。

  YCbCr是通过有序的三元组来表示的,三元由Y(Luminance)、Cb(Chrominance-Blue)和Cr(Chrominance-Red)组成,其中Y表示颜色的明亮度和浓度,而Cb和Cr则分别表示颜色的蓝色浓度偏移量和红色浓度偏移量。人的肉眼对由YCbCr色彩空间编码的视频中的Y分量更敏感,而Cb和Cr的微小变化不会引起视觉上的不同,根据该原理,通过对Cb和Cr进行子采样来减小图像的数据量,使得图像对存储需求和传输带宽的要求大大降低,从而达到在完成图像压缩的同时也保证了视觉上几乎没有损失的效果,进而使得图像的传输速度更快,存储更加方便。我们要的到灰度图像,首先要将采集到的彩色图像转化为YCbCr。

  这是OV7725的手册中给出的RGB888 to YCbCr的算法公式。简单明了,将一副图片的RGB分量提取出来,然后用上面的公式进行运算,得到YcbCr分量,然后在合成显示即可。这样显示出来的是YcbCr色彩空间的图片,我们只取Y分量作为新的图片的三个分量合成,得到的即是这幅彩色图片的灰度图。下面先记录一些MATLAB在图像处理中常用语法和函数。

清空和关闭命令

clc 清空命令区域

clear 清空工作区

clear all 清空工作区与全局变量

close 关闭当前窗口

close all 关闭所有窗口

这几条命令一般写在代码的开头,用来清空或关闭之前操作残留的窗口和命令。

合成和提取RGB的三个分量

fR、fG、fB分别表示RGB三个分量的图像。一副RGB图像可以利用cat(级联)操作符合成彩色图像。

rgb_image = cat(3, fR, fG, fB)

提取三个分量

fR = RGB(:, :, 1);   红色分量

fG = RGB(:, :, 2);   绿色分量

fB = RGB(:, :, 3);   蓝色分量

size()函数得到图片的行列数

[ROW, COL,DIM] =    size(R_data); 得到一副图像的行列数。

显示图片

figure, imshow(imag) 保存第一幅图像并同时显示第二幅图像。

显示图片用imshow()函数,前面加个figure; 可以在原来显示的基础上重新打开一个窗口显示。

生成矩阵函数

zeros函数——生成零矩阵

ones函数——生成全1阵

【zeros的使用方法】

B=zeros(n):生成n×n全零阵。

B=zeros(m,n):生成m×n全零阵。

B=zeros([m n]):生成m×n全零阵。

B=zeros(d1,d2,d3……):生成d1×d2×d3×……全零阵或数组。

B=zeros([d1 d2 d3……]):生成d1×d2×d3×……全零阵或数组。

B=zeros(size(A)):生成与矩阵A相同大小的全零阵。

【ones的使用方法】

ones的使用方法与zeros的使用方法类似。

RGB转YcbCr色彩空间MATLAB代码实现

  1. %将一幅640*480的彩色图片转换成显示成灰度显示?
  2. clc;
  3. clear all;
  4. close all;
  5.  
  6. RGB_data = imread('lena.jpg');%图像读入
  7.  
  8. R_data = RGB_data(:,:,);
  9. G_data = RGB_data(:,:,);
  10. B_data = RGB_data(:,:,);
  11.  
  12. imshow(RGB_data);
  13.  
  14. [ROW,COL, DIM] = size(RGB_data); %提取图片的行列数
  15.  
  16. Y_data = zeros(ROW,COL);
  17. Cb_data = zeros(ROW,COL);
  18. Cr_data = zeros(ROW,COL);
  19. Gray_data = RGB_data;
  20. %YCbCr_data = RGB_data;
  21.  
  22. for r = :ROW
  23. for c = :COL
  24. Y_data(r, c) = 0.299*R_data(r, c) + 0.587*G_data(r, c) + 0.114*B_data(r, c);
  25. Cb_data(r, c) = -0.172*R_data(r, c) - 0.339*G_data(r, c) + 0.511*B_data(r, c) + ;
  26. Cr_data(r, c) = 0.511*R_data(r, c) - 0.428*G_data(r, c) - 0.083*B_data(r, c) + ;
  27. end
  28. end
  29.  
  30. % YCbCr_data(:,:,)=Y_data;
  31. % YCbCr_data(:,:,)=Cb_data;
  32. % YCbCr_data(:,:,)=Cr_data;
  33.  
  34. % figure;
  35. % imshow(YCbCr_data);
  36.  
  37. Gray_data(:,:,)=Y_data;
  38. Gray_data(:,:,)=Y_data;
  39. Gray_data(:,:,)=Y_data;
  40.  
  41. figure;
  42. imshow(Gray_data);

结果显示

我们进行图像处理一般是显示灰度图,所以只提取YcbCr的Y分量,就可以显示出lena的灰度图的了。

原图

灰度图

嗯,很漂亮。

转载请注明出处:NingHeChuan(宁河川)

个人微信订阅号:开源FPGA

如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:https://www.cnblogs.com/ninghechuan/p/9515639.html

基于MATLAB的RGB转YCBCR色彩空间转换的更多相关文章

  1. YUV / RGB 格式及快速转换算法

    1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用 的过程,所以在不同的应用领域中为了更好更准确 ...

  2. 视频图像处理基础知识5(RGB与Ycbcr相互转换公式 )【转】

    转自:http://blog.csdn.net/Times_poem/article/details/51471438 版权声明:本文为博主原创文章,未经博主允许不得转载. 需求说明:视频处理算法基本 ...

  3. 基于FPGA的RGB图像转灰度图像算法实现

    一.前言 最近学习牟新刚编著<基于FPGA的数字图像处理原理及应用>的第六章直方图操作,由于需要将捕获的图像转换为灰度图像,因此在之前代码的基础上加入了RGB图像转灰度图像的算法实现. 2 ...

  4. [ZZ] 基于Matlab的标记分水岭分割算法

    基于Matlab的标记分水岭分割算法 http://blog.sina.com.cn/s/blog_725866260100rz7x.html 1 综述 Separating touching obj ...

  5. 基于MATLAB的人脸识别算法的研究

    基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...

  6. matlab将rgb图转为灰度图的原理代码

    MyYuanLaiPic = imread('e:/image/matlab/Cluo.jpg');%读取RGB格式的图像 MyFirstGrayPic = rgb2gray(MyYuanLaiPic ...

  7. 基于MATLAB的腐蚀膨胀算法实现

    本篇文章要分享的是基于MATLAB的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作. 什么是二值图像 ...

  8. 数字图像处理:基于MATLAB的车牌识别项目 标签: 图像处理matlab算法 2017-06-24 09:17 98人阅读 评论(0)

    学过了数字图像处理,就进行一个综合性强的小项目来巩固一下知识吧.前阵子编写调试了一套基于MATLAB的车牌识别的项目的代码.今天又重新改进了一下代码,识别的效果好一点了,也精简了一些代码.这里没有使用 ...

  9. RGB 与 (RGB转 YCbCr再转为 RGB)的图像

           RGB 与 (RGB转 YCbCr再转为 RGB)的图像   不可逆,能够从 矩阵的逆运算看出来. 附上 matlab 代码:         clc,clear; Source=imr ...

随机推荐

  1. fio 测试磁盘

    root@rook-test:/# ceph osd status+----+-----------------------------+-------+-------+--------+------ ...

  2. pip批量更新安装的包

    ------------------pip批量更新库-------------------- 1)查看过期的库 pip list --outdated  更新单一的库: pip install --u ...

  3. IDEA 码云 安装

    安装方式: 从IDEA插件仓库搜索Gitee下载并安装即可. 登陆并拉取项目代码 1. 启动 idea,选择Check out from Version Control-码云 2. 输入用户名和密码, ...

  4. Spring @Configuration

    下面是一个典型的spring配置文件(application-config.xml): <beans> <bean id="orderService" class ...

  5. httpclient4例子

    参考:http://hc.apache.org/httpclient-3.x/tutorial.html import org.apache.http.HttpEntity; import org.a ...

  6. 安装tftp服务器进行文件传输

    1. 安装: sudo apt-get install tftp-hpa tftpd-hpa ps: tftpd是服务器,tftp是客户端,客户端能发送和获取,服务器不能动. 2. 配置文件: sud ...

  7. python之信号量【Semaphore】

    # 互斥锁同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据,比如 # 一个厕所有3个坑,那么最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去 import ...

  8. php Pthread 多线程 (二) Worker和Threaded

    <?php //Worker是具有持久化上下文(执行环境)的线程对象 //Worker对象start()后,会执行run()方法,run()方法执行完毕,线程也不会消亡 class MySqlW ...

  9. [z]Windows 下基于 Eclipse 的可视化远程 Linux C/C++ 开发环境搭建

    http://blog.csdn.net/lostaway/article/details/8086056 1.简介 Windows 下远程 Linux 开发工具,比较著名的就是 WinGDB 和 M ...

  10. windows,phalcon工具的安装使用

    一.使用工具之前,必须安装phalcon的扩展,也就是php_phalcon.dll动态链接库 phalcon官方地址:https://github.com/phalcon/cphalcon/rele ...