基于TIC6000的DSP教学实验箱操作教程:5-18 RGB24图像灰度转换(LCD显示)

本文介绍了RGB24图像灰度转换的原理,包括加权平均法和整数算法的实现,以及如何在LCD上展示转换前后图像的完整实验过程,包括硬件连接和软件操作步骤。
摘要由CSDN通过智能技术生成

一、实验目的

学习RGB24图像灰度转换的原理,掌握图像的读取方法,并实现在LCD上显示灰度转换前后的图像。

二、实验原理

RGB24图像灰度转换

RGB颜色空间作为一种常用的彩色图像表示模型,分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。一般情况下,RGB彩色图像灰度化有三种转化方案:

(1)加权平均法

(2)平均值法:对彩色图像的每个像素中的R、G、B三个分量的值进行简单的算术平均,将得到的平均值作为灰度图像对应像素的亮度值。

(3)最大值法:将彩色图像的每个像素中的R、G、B三个分量中的最大值作为灰度图对应像素的灰度值。

RGB24图像灰度转换:加权平均法

所谓加权平均法就是根据三基色的重要性及其他指标,将R、G、B三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此我们可以按照下式对R、G、B三分量进行加权平均,则能得到较合理的灰度图像。

image.png

而实际应用时,希望避免低速的浮点运算,所以需要整数算法,变种的公式:

Gray = (R30 + G59 + B*11 + 50) / 100

整数算法已经很快了,但是最后的除法仍制约了速度。移位比除法快多了,所以可以将系数缩放成 2 的整数幂。

本实验使用8位精度,2 的 8次幂是256,所以这样计算系数

0.299 * 256 = 76.544 ≈ 76

0.587 * 256 + (0.544) = 150.272 + 0.264 = 150.816 ≈ 150

0.114 * 256 + (0.816) = 29.184 + 0.896 = 30.08

由于四舍五入会有较大的误差,所以将以前的计算结果的误差一起计算进去,舍入方式是去尾法。移位优化之后,8位精度系数,如下:

Gray = (R76 + G150 + B*30) >> 8

程序流程设计

程序流程设计中首先要进行外设使能配置,接着进行LCD管脚复用配置和LCD中断配置,然后进行LCD显示的初始化,最后读取工程目录下的BMP图像并进行RGB24图像的灰度转换处理,将图像数据显示到LCD上。

image.png

三、操作现象

实验设备

本实验使用的硬件接口为LCD,所需硬件为实验板、仿真器、LCD和电源。

image.png

硬件连接

(1)连接仿真器和电脑的USB接口,

(2)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。

image.png

软件操作

导入工程,选择Demo文件夹下的对应工程

编译工程,生成可执行文件

将CCS连接实验箱并加载程序

程序加载完成后点击运行程序

运行程序后,CCS的Console窗口会打印相关信息,同时LCD会显示标题。

稍等片刻后,图像处理完成,LCD会显示灰度转换处理前后的图片。

实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。

image.png

image.png

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于全变分的18张彩色图像融合算的Matlab实现代码: ```matlab clc; clear all; close all; %% 读入图像 for i=1:18 img{i}=imread(['img',num2str(i),'.jpg']); end %% 参数设置 alpha=1; % 全变分项参数 beta=1; % 数据项参数 lambda=0.5; % 正则化参数 mu=0.02; % 步长 %% 图像融合 tic; for i=1:18 I=img{i}; [m,n,d]=size(I); u=double(I)/255; p=zeros(m,n,2); b=zeros(m,n,d); for k=1:d [u(:,:,k),p(:,:,1),p(:,:,2)]=TV(u(:,:,k),alpha,beta,lambda,mu); end b(:,:,i)=u(:,:,i); end toc; %% 结果显示 figure; imshow([uint8(img{1}),uint8(img{2}),uint8(img{3});uint8(img{4}),uint8(img{5}),uint8(img{6});uint8(img{7}),uint8(img{8}),uint8(img{9});uint8(img{10}),uint8(img{11}),uint8(img{12});uint8(img{13}),uint8(img{14}),uint8(img{15});uint8(img{16}),uint8(img{17}),uint8(img{18})]); title('原图像'); figure; imshow(uint8(b)); title('融合结果'); %% 全变分函数 function [u,p1,p2]=TV(u,alpha,beta,lambda,mu) [m,n]=size(u); p1=zeros(m,n); p2=zeros(m,n); maxit=1000; tol=1e-4; energy=zeros(maxit,1); for i=1:maxit u0=u; divp=divergence(p1,p2); for k=1:3 u(:,:,k)=u(:,:,k)-mu*(divp(:,:,k)-beta*(u(:,:,k)-u0(:,:,k))); end gradu=gradient(u); p1=p1+mu*alpha*gradu(:,:,1); p2=p2+mu*alpha*gradu(:,:,2); normp=sqrt(p1.^2+p2.^2); normp=max(1,normp); p1=p1./normp; p2=p2./normp; energy(i)=sum(sum((u-u0).^2))+alpha*sum(sum(sqrt(p1.^2+p2.^2)))+beta*sum(sum((u-u0).^2))+lambda*sum(sum((divp).^2)); if i>1 && abs(energy(i)-energy(i-1))<tol break; end end end %% 梯度算子 function [gradu]=gradient(u) [m,n,d]=size(u); gradu=zeros(m,n,d,2); gradu(:,:,1,1)=[diff(u,1,2),u(:,1,:)-u(:,n,:)]; gradu(:,:,1,2)=[u(1,:,:)-u(m,:,:),diff(u,1,1)]; gradu(:,:,2,1)=[diff(u,1,2),zeros(m,1,d)]; gradu(:,:,2,2)=[diff(u,1,1),zeros(1,n,d)]; end %% 散度算子 function [divp]=divergence(p1,p2) [m,n]=size(p1); divp=zeros(m,n,2); divp(:,:,1)=[p1(:,end)-p1(:,1),-diff(p1,1,2)]; divp(:,:,2)=[p2(end,:,:)-p2(1,:,:),-diff(p2,1,1)]; end ``` 具体实现步骤如下: 1. 读入18张彩色图像,并设置参数。 2. 对每个彩色通道分别进行全变分算,得到融合后的彩色图像。 3. 显示原始图像和融合后的图像。 需要注意的是,在实现过程中,我们需要先写出梯度算子和散度算子的函数,供全变分算调用。同时,为了提高算的速度,我们可以在梯度算子和散度算子中使用差分算,从而避免使用循环来计算每个像素的梯度和散度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值