【MATLAB基础】数据的读取

01.引言

        MATLAB是一个对于非计算机专业的学生非常友好的编程环境,尤其是对于工程科学和数学领域的应用。MATLAB的一个重要特点是它提供了大量预构建的函数,这些函数可以帮助用户在数值分析、图形处理、信号处理和线性代数等领域进行高效的编程。同时,MATLAB的编程语言相对简洁直观,不需要像C++或Java那样关注太多底层的细节,这使得初学者可以更快地开始编写程序,并看到实际的成果。

02.数据的读取

        信号处理的第一步是对待处理信号进行读取。在利用MATLAB软件进行处理之前,必须先将信号导入系统。以下是一些关于数据读取的MATLAB代码以及相关例子:

(1)读取.mat文件

load sumsin

(2)读取Excel文件

% 读取Excel文件
data = xlsread('example.xlsx');

(3)读取.csv文件

% 读取.csv文件
data = csvread('example.csv');

(4)读取.语音文件(并添加噪声)

[X,fs]= audioread('speech_dft.wav');

(5)读取.png图片文件

RGB = imread('peppers.png');
[X,map] = rgb2ind(RGB,128);%真彩图像转化为索引图像
G = rgb2gray(RGB); %真彩色图像转化为灰度图像;
size(RGB)%真彩图像是三维数组,每个通道每个像素点有其颜色值,颜色取值为[0,255]
size(map)%三个通道颜色值量化为128个颜色,每个颜色有R,G,B三个通道值。
size(X)%图像像素对应map中一个值,取值为[0,128]
size(G)%灰度图像每个像素对应一个灰度值,取值为[0,255]

figure(1), imshow(RGB);
imwrite(RGB,'Fig1-6(a)RGB.jpg','jpg');
figure(2), imshow(X,map);%索引图像,为彩色的
figure(3), imshow(X);%量化为[0,128]的灰度图
imwrite(X,'Fig1-6(c)X128.jpg','jpg');
figure(4), imshow(G);%灰度图像,灰度值[0,255]
imwrite(G,'Fig1-6(d)Gray.jpg','jpg');

本段代码演示了如何在MATLAB中处理图像信号,特别是如何从真彩色图像转换到索引图像和灰度图像,并展示以及保存这些图像的过程。具体效果如下:

1. 通过`imread`函数读取名为`peppers.png`的真彩色图像到变量`RGB`中。此图像是一个三维数组,其中包含了红色(R)、绿色(G)、和蓝色(B)三个颜色通道的数值,每个通道内的颜色值范围是0到255。

2. 使用`rgb2ind`函数将真彩色图像`RGB`转换为索引图像`X`和对应的颜色映射表`map`,颜色被量化到128个不同的颜色值中。`X`中的每个值对应`map`中的一个颜色,颜色值范围是从0到128。

3. 使用`rgb2gray`函数将真彩色图像`RGB`转换为灰度图像`G`。在灰度图像中,每个像素点对应一个灰度值,取值范围同样是从0到255。

4. 使用`size`函数分别查看`RGB`、`map`、`X`、和`G`的尺寸,以验证其数据结构和维度。

5. 使用`figure`和`imshow`函数分别显示真彩色图像、索引图像(彩色)、单独的索引图像(量化后的灰度图)、和灰度图像。每种图像展示了从原始真彩图像到不同图像格式的转换。

6. 通过`imwrite`函数,代码将转化后的索引图像和灰度图像保存为JPEG文件,分别命名为`Fig1-6(a)RGB.jpg`、`Fig1-6(c)X128.jpg`和`Fig1-6(d)Gray.jpg`。

总结而言,这段代码展示了在MATLAB中如何对图像数据进行读取、转换和保存。从真彩色到索引图像的转换使得图像在保留视觉质量的同时减少了颜色的数量,而转换为灰度图像则是常见的图像处理步骤,用于减少计算复杂性或用于特定的图像分析任务。

(6)读取视频文件

% 读取视频文件 'xylophone.mpg', 标记为 'myreader1'.
readerobj = VideoReader('xylophone.mpg', 'tag', 'myreader1');
 
% 读取视频所有帧.
vidFrames = read(readerobj);
 
% 得到视频的总帧数
numFrames = get(readerobj, 'NumFrames');
 
%从视频结构建立Matlab视频流
for k = 1 : numFrames
    mov(k).cdata = vidFrames(:,:,:,k);
    mov(k).colormap = [];
end

% 建立图像
hf = figure; 

% 根据视频的宽度和高度重新规划视频图像大小——拉伸
set(hf, 'position', [150 150 readerobj.Width readerobj.Height])
 
% 重放视频
movie(hf, mov, 1, readerobj.FrameRate);

03.实际应用:图像的类型转换

%调用程序,显示各分量。
rgb = imread('peppers.png');
hsi = Rgb2hsi(rgb);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
figure(1),imshow(H, []);
%灰度拉伸到0-255,进行输出
imwrite(uint8((H-min(min(H)))./(max(max(H)-min(min(H)))).*255),'H.jpg','jpg')
figure(2),imshow(S, []);
imwrite(S,'S.jpg','jpg')
figure(3),imshow(I, []);
imwrite(I,'I.jpg','jpg')
Nrgb = Hsi2rgb(hsi);
Nrgb = im2uint8(Nrgb);%图像格式转化
max(max(rgb-Nrgb))
R = Nrgb(:,:,1);
G = Nrgb(:,:,2);
B = Nrgb(:,:,3);
figure(4),imshow(R, []);
imwrite(R,'R.jpg','jpg')
figure(5),imshow(G, []);
imwrite(G,'G.jpg','jpg')
figure(6),imshow(B, []);
imwrite(B,'B.jpg','jpg')
代码效果

这段代码是用于处理图像的RGB到HSI(色调、饱和度、亮度)的转换,然后再转换回RGB,并将各个分量显示并保存成图像文件。让我来解释一下:

  1. rgb = imread('peppers.png');: 从名为 “peppers.png” 的图像文件中读取RGB图像数据。

  2. hsi = Rgb2hsi(rgb);: 将RGB图像数据转换为HSI颜色空间。

  3. H = hsi(:,:,1);S = hsi(:,:,2);I = hsi(:,:,3);: 从转换后的HSI图像中提取出色调(H)、饱和度(S)、亮度(I)三个分量。

  4. figure(1),imshow(H, []);: 显示色调分量。

  5. imwrite(uint8((H-min(min(H)))./(max(max(H)-min(min(H)))).*255),'H.jpg','jpg'): 对色调分量进行灰度拉伸,然后保存成 “H.jpg” 图像文件。

  6. 同样的步骤对饱和度和亮度分量进行显示和保存。

  7. Nrgb = Hsi2rgb(hsi);: 将HSI图像数据转换回RGB颜色空间。

  8. Nrgb = im2uint8(Nrgb);: 将转换后的RGB图像数据转换成uint8格式。

  9. max(max(rgb-Nrgb)): 计算转换前后RGB图像之间的最大差异。

  10. 分别提取转换后的RGB图像的三个分量:红色(R)、绿色(G)、蓝色(B)。

  11. 将各个RGB分量显示并保存成图像文件。

代码的效果是将原始RGB图像转换为HSI颜色空间,然后再转换回RGB,并分别显示和保存各个分量。​

MATLAB中,可以使用fread函数来读取二进制数据。该函数的语法为: [dd ll]=fread(fid,inf,'float32'); 其中,fid表示打开的文件句柄,inf表示读取所有数据,'float32'表示数据的类型为32位浮点数。这样就可以将文件中的数据读取出来并存储在变量dd和ll中。 如果数据量很大,可以考虑使用循环分批读取的方法,或者使用稀疏矩阵来存储数据。另外,还可以参考《深入浅出MATLAB 7_x混合编程》一书第一章,了解更多关于数据读取的方法和技巧。 如果需要将MATLAB数值矩阵写入文本文件,可以使用MATLAB的各种函数来按照不同的ASCII码格式来存写数据。具体使用哪个函数取决于所要存写数据数据量和数据格式。一种常见的方法是使用空格符来分隔矩阵的列和行。可以参考相关函数的帮助文档或者官方文档了解更多详细信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [matlab读取文件各种方法](https://blog.csdn.net/weixin_41652574/article/details/128486960)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [matlab的各种数据读取(txt,dat,mat等格式),文件打开关闭](https://blog.csdn.net/H2008066215019910120/article/details/12587721)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB科研小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值