clear;
clc;
%读一张彩色图像存在 i
i = imread('lena.jpg');
%将彩色图像转换为灰度图像
igray = rgb2gray(i);
%把灰度图像保存为.jpg文件
imwrite(igray,'lena_gray.jpg');
% 显示变量i中的彩色图像,并为窗口添加标题
figure;imshow(i);
title('原始彩色图像');
%在新窗口中显示变量igray中表示的灰度图像,并为窗口添加标题
figure;imshow(igray);
title('转化后的灰度图像');
Matlab中用 M×N×3
的三维数组保存RGB真彩色图像数据。
改写彩色图像像素的RGB值
% 1.2 改写像素的RGB值
clear;
clc;
%查看一张彩色RGB image的信息
fileinfo = imfinfo('lena.jpg'); % 在命令行窗口中运行
i = imread('lena.jpg');
%%
i1 = i; % 将Image 信息复制到变量i1中
% 对像素 R G B 三个分量重新赋值,改变其颜色 lena.jpg 474*474*3 随便找一个点
i(200,200,1)=255;i(200,200,2)=0;i(200,200,3)=0;
%将修改后前后的两张图并排显示
figure; montage({i1,i});title('左侧为原始image|右侧为更改像素RGB分量后');
%%
%以像素(30,60)为起点画 宽6长100的水平红线
i(30:35,60:159,1)=255;
i(30:35,60:159,2)=0;
i(30:35,60:159,3)=0;
%以像素(50,60)为起点画 宽6长100的水平绿线
i(50:55,60:159,1)=0;
i(50:55,60:159,2)=255;
i(50:55,60:159,3)=0;
%以像素(70,60)为起点画 宽6长100的水平蓝线
i(70:75,60:159,1)=0;
i(70:75,60:159,2)=0;
i(70:75,60:159,3)=255;
i2 = i(200:220,300:350,:);
i(100:120,200:250,:)= i2; % 复制一部分
i = insertShape(i,'circle',[130,150,50],'LineWidth',5,'Color','yellow');
figure;
imshow(i);
索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像可把像素值“直接映射”为调色板数值。
clear;
clc;
% 将RGB图像转换为索引图像 [i1,map]=rgb2ind(i,8,'nodither');
i = imread('index.jpg');
[i1,map]=rgb2ind(i,8,'nodither');
%显示结果
figure;imshow(i);title('RGB彩色图像OriginalRGBimage');
%显示转换后的索引图像,仔细比较二值之间的差异
figure;imshow(i1,map);title('索引图像Indexdimage');
clear;
clc;
[X,map]=imread('trees.tif');%读入一幅彩色索引图像
%显示图像figure;
imshow(X,map);title('索引图像Indexdimage');
%把索引图像转换为RGB彩色图像
Irgb=ind2rgb(X,map);
%显示得到的彩色图像
figure,imshow(Irgb);title('ConvertsindexedimagetoRGBimage');
灰度图像描述像素的灰度值(强度值、亮度值),Matlab中用一个M×N二维数组保存灰度图像数据。
RGB图像转换为灰度图像
% 1.2.3 灰度图像
clear;
clc;
i = imread('lena.jpg');
%把彩色图像转换为灰度图像
i1=rgb2gray(i);
%采用MATLAB向量运算方法实现彩色灰度图像转换
%将数据类型由uint8转换为double
id=double(i);
i2=0.299*id(:,:,1)+0.587*id(:,:,2)+0.114* id(:,:,3);
%将数据类型由double转换为uint8
i2=uint8(i2);
figure; montage({i1,i2});title('左侧为rgb2gry转化 | 右侧为MATLAB向量运算方法得到');
Matlab 向量运算方法
二值图像(binaryimage)的每个像素值只能取两个离散值之一,这两个离散值一个代表“黑”、另一个代表“白”,真正是“非黑即白”,也可将二值图像看作特殊的灰度图像。
灰度图像转换为二值图像
% 1.2.3 灰度图像
clear;
clc;
i = imread('lena.jpg');
%把彩色图像转换为灰度图像
i1=rgb2gray(i);
%采用MATLAB向量运算方法实现彩色灰度图像转换
%将数据类型由uint8转换为double
id=double(i);
i2=0.299*id(:,:,1)+0.587*id(:,:,2)+0.114* id(:,:,3);
%将数据类型由double转换为uint8
i2=uint8(i2);
%将灰度图像转换为二值图像
i3 =imbinarize(i1);
%将原始彩色图像i 、 灰度图像 i2 、 二值图像i3在同一窗口中显示
figure;
subplot(1,3,1);imshow(i);title('RGB彩色图像');
subplot(1,3,2);imshow(i1);title('灰度图像');
subplot(1,3,3);imshow(i3);title('二值图像');
视频图像是一组内容连续渐变的图像序列,视频中每幅图像称为帧(frame),每秒显示的图像帧数称为帧率(framerate,fps-framespersecond)。
视频文件的读取与图像帧抽取
% 视频文件的读取与图像帧抽取
clear;
clc;
vedio = VideoReader("romantic.mp4");
fps = vedio.FrameRate; %获取视频帧率
fprintf('fps=%d',fps); %显示输出视频帧率
%读取视频文件中的每一帧图像并显示
while(hasFrame(vedio))
vidFrame=readFrame(vedio);%从视频文件中读取一帧图像
imshow(vidFrame,'Border','tight');%显示该帧图像
pause(1/fps);%暂停指定时间,按帧率播放
end
Summary
来自场景的光线,经相机光学镜头会聚后形成光影像,投射到图像传感器的靶面上,这个光影像本质上是一种时间和空间连续的二维光能量分布。为了把这个光影像转换成计算机可以操作的数字图像,需经过 空间采样、时间采样、像素值量化
三个主要步骤。
图像是一种特殊的二维信号,可以用二元函数 f (x,y) 表示。其中,灰度图像灰度图像可定义为一个二维函数f(x,y),这里x和y是定义域为平面的空间坐标,而在任何一对空间坐标(x,y)上的函数值(幅值)称为该点图像的强度(intensity)或灰度(grayscale)。
模拟图像与数字图像
模拟图象: 如果图像f(x,y)定义域(x,y)和值域均为连续值时,称其为模拟图像。
数字图像: 如果图像f(x,y)的定义域(x,y)和值域均为有限的离散数值时,称其为数字图像。
**空间分辨率:**是图像中可辨别的最小细节的度量,依赖于成像面阵传感器的有效像素数,像素数越多,对细节的分辨和捕捉能力就越强,图像就越清晰。当然分辨率只是影响图像清晰度的重要因素之一。
**灰度分辨率:**是灰度图像像素明暗程度可分辨的最小变化,或彩色图像像素彩色分量强弱可分辨的最小变化。
一张image 可以用一个M×N 的二维数组表示,为描述每个像素在图像平面上的位置,建立通用的笛卡尔坐标系。其中选取左上角为坐标原点,轴垂直向下、对应数组行序,y轴水平向右、对应数组列序。
但是MATLAB约定图像坐标系缘点为图像左上角,x轴水平向右、对应数组列序,y轴垂直向下、对应数组行序。
示例:图像几何变换-旋转变换
% 图像几何变换-旋转变换
clear;
clc;
i = imread('lena.jpg');
i1 = imrotate(i,40,'bilinear','crop');%绕图像中心逆时针旋转40
%在同一窗口中显示旋转前、后的图像
figure;imshowpair(i,i1,'montage');title('原图像(左)|逆时针旋转结果(右)');
为便于界定参与运算的像素集合,常用“邻域”(neighborhood)描述像素之间的位置关系。假定某一像素p的坐标为(x,y),其邻域是指以坐标(x,y)为中心的一组相邻像素构成的集合。如:4-邻域、4-对角邻域、8-邻域、m×n矩形邻域等。