1 图像的表示方法

常见的5种图像表示方法:分别是二进制图像,索引图像,灰度图像,RGB图像和多帧图像。
1.1二进制图像(二值图像)
通常由一个二维数组表示,一位表示一个像素,非0即1,0表示黑色,1表示白色。
1.2 灰度图像(单色图像)
通常也由一个二维数组表示,8位表示一个像素,0表示黑色,255表示白色。
1.3 RGB图像(真彩色图像):
利用三个大小相同的二维数组表示,3个数组分别代表R G B这三个分量,每种颜色分量占8位,每一位由[0,255]中的任意值表示,那么一个像素由24位表示。

2 图像的数据结构

数字图像处理中常用的数据结构有矩阵、链码、拓扑结构和关系结构;
矩阵用于描述图像;
链码用于描述图像的边界,链码又分为四链码和八链码;
拓扑结构用于描述图像的基本结构,有4-邻域,对角邻域,8-邻域;
关系结构用于描述一组目标物体之间的相互关系。

3 计算机中图像文件的基本格式

①BMP文件格式:采用位映射存储格式,图像深度可选,从1bits-24bits,不采用任何压缩,所以占用的空间很大。
②GIF文件格式:基于LZW算法的连续色调的无损压缩格式,存储效率高,最多支持256种色彩的图像。
③JPEG文件格式:使用一种有损压缩算法,压缩比率通常在10:1到40:1,可以支持24bits真菜色。
④TIFF文件格式:适用于RGB真彩色图像。

4 图像类型的转换

4.1 RGB 图像的转换
4.1.1 RGB 图像转为灰度图像

I = imread('douluodalu.jpg'); %读取图像
X = rgb2gray(I); %转为灰色
figure; %画布
subplot(121),imshow(I); %小图显示,一行两列第一个
subplot(122),imshow(X); %小图显示,一行两列第二个


4.1.2 RGB 图像转索引图像

rgb = imread('doluodalu.jpg');
[x1, map1] = rgb2ind(rgb, 64); %将rgb图像转为索引图像,颜色种类至少64中,最小方差量化
[x2, map2] = rgb2ind(rgb, 0.2); %将rgb图像转为索引图像,颜色至少216中,均匀量化。
map3 = colorcube(128); %创建一个颜色映射表
x3 = rgb2ind(rgb, map3); %颜色128种,颜色表近似法
% set(0, 'defaultFigurePosition',[100, 100, 1000, 500]);
% set(0, 'defaultFigureColor', [1 1 1]);
figure;
subplot(131),imshow(x1, map1);
subplot(132),imshow(x2, map2);
subplot(133),imshow(x3, map3);


4.2 灰度图像的转换
4.2.1 灰度图像转索引图像

clear all;
clc;
gray = imread('gray.jpg'); %读取灰度图像
[x, map] = gray2ind(gray, 8); %灰度图像转索引图像,灰度级为 8
% figure,imshow(gray);
% figure,imshow(x, map);
figure;
subplot(121),imshow(gray);
subplot(122),imshow(x, map);


4.2.2 利用阈值法将灰度图转为索引图

clear all;
clc;
gray = imread('gray.jpg'); %读取灰度图
ind = grayslice(gray, 32); %用阈值法将灰度图转为32级的索引图
figure;
imshow(gray);
figure, imshow(ind, jet(32)); %jet函数生成一个颜色映射表



4.3 二值图像的转换
4.3.1 将灰度图转为二值图像

clc;
close all;
gray = imread('gray.jpg');
bw1 = im2bw(gray, 0.4); %将二值图像转为灰度图像,阈值为0.4.
bw2 = im2bw(gray, 0.6); %将二值图像转为灰度图像,阈值为0.6,小于阈值的取零
figure;
subplot(131), imshow(gray);
subplot(132), imshow(bw1);
subplot(133), imshow(bw2);


4.3.2 索引图转为二值

clear;
clc;
load trees; %加载内置trees.mat,将数据载入到workspace
bw = im2bw(X, map, 0.4); %将索引图转换为二值图像,阈值为0.4
figure,imshow(X, map);
figure,imshow(bw);



4.3.3 数值矩阵转为灰度图像

clear;
clc;
X = magic(256); %利用函数magic()产生一个256*256的方阵
%魔术矩阵,每一行元素之和,每一列元素之和,与对角线元素之和三者相等。
% X = imread('gray.jpg');
bw = mat2gray(X); %将数值矩阵转为一个灰度图像
figure,imshow(bw);

5 文件信息的读取

matlab中,对文件操作,往往要知道文件的相关信息,如文件名,文件格式等等,
我们用imfinfo()这个函数来查看文件信息

>> info = imfinfo('cameraman.tif')
info = Filename: 'C:\Program Files\MATLAB\MA...'FileModDate: '04-十二月-2000 05:57:54'FileSize: 65240Format: 'tif'FormatVersion: []Width: 256Height: 256BitDepth: 8ColorType: 'grayscale'FormatSignature: [77 77 0 42]ByteOrder: 'big-endian'NewSubFileType: 0BitsPerSample: 8Compression: 'PackBits'PhotometricInterpretation: 'BlackIsZero'StripOffsets: [1x8 double]SamplesPerPixel: 1RowsPerStrip: 32StripByteCounts: [1x8 double]XResolution: 72YResolution: 72ResolutionUnit: 'Inch'Colormap: []PlanarConfiguration: 'Chunky'TileWidth: []TileLength: []TileOffsets: []TileByteCounts: []Orientation: 1FillOrder: 1GrayResponseUnit: 0.0100MaxSampleValue: 255MinSampleValue: 0Thresholding: 1Offset: 64872ImageDescription: 'This image is distributed ...'

5.1 特殊图像格式的读取

%网页上保存gif图只需拖到指定位置即可。
[gif, map] = imread('gif.gif', 2); %因为是彩色的,所以保存为索引图。读取第二帧的图像
[gif1, map1] = imread('gif.gif', 12); %读取第12帧的图像
figure,
subplot(121), imshow(gif, map); %显示第二帧的图像
subplot(122), imshow(gif1, map1);rgb = imread('rgb.jpg');
imwrite(rgb, 'rgb.png'); %将 jpg 格式保存为 png格式。
png = imread('rgb.png', 'BackgroundColor', [1 0 0]); %读取图像,并设置该图像的
%透明像素与白色合成,最后是RGB图像。
figure,
imshow(png)

5.2 函数 imshow( )

clc, clear;
I = imread('gray.jpg');
subplot(121),imshow(I);%显示原图
subplot(122),imshow(I, [60, 120]); %灰度级上下为[60, 120],灰度值较大的地方比较亮,
%灰度值较小的地方比较暗

5.3 函数 warp( )

I = imread('douluodalu.jpg');
figure;
% warp(I); %显示原图像,效果类似imshow()
[x, y, z] = sphere;
% 创建三个(N+1)*(N+1)的矩阵,使得surf(X,Y,Z)建立一个球面,默认N=20
subplot(121),warp(I);
subplot(122),warp(x,y,z,I);
grid; %建立网格

6 图像点运算

6.1 线性灰度变换
函数 : imadjust ( )

gamma = 0.5; %调整线性度取值
I = imread('douluodalu.jpg');R = I;
R(:,:,2) = 0; %只保留红色通道
R(:,:,3) = 0;
R1 = imadjust(R, [0.5, 0.8], [0, 1], gamma); %调整灰度G = I;
G(:,:,1) = 0;
G(:,:,3) = 0;
G1 = imadjust(G, [0.5, 0.8], [0, 1], gamma);B = I;
B(:,:,1) = 0;
B(:,:,2) = 0;
B1 = imadjust(B, [0.5, 0.8], [0, 1], gamma);I1 = R1 + G1 + B1;
r = figure;
subplot(121),imshow(R);
subplot(122),imshow(R1);
g = figure;
subplot(121),imshow(G);
subplot(122),imshow(G1);
b = figure;
subplot(121),imshow(B);
subplot(122),imshow(B1);
rgb = figure;
subplot(121),imshow(I);
subplot(122),imshow(I1);




7 图像代数运算

7.1 图像的加法运算
7.1.1 函数 imadd ()

clc;
clear all;I = imread('douluodalu1.jpg');
J = imread('douluodalu2.jpg');
% imshow(I);
% imshow(J);
K = imadd(I, J);
subplot(131),imshow(I);
subplot(132),imshow(J);
subplot(133),imshow(K);


7.1.2 一幅图每个像素增加亮度

clc;
clear all;
I = imread('douluodalu.jpg');
J = imadd(I, 30); %添加30的亮度
figure;
subplot(121),imshow(I);
subplot(122),imshow(J);

7.1.3 函数 imnoise ( )

通过对同一幅图像叠加取平均值 , 消除原图像的附加噪声

clc;
clear all;
RGB = imread('douluodalu.jpg');
A = imnoise(RGB, 'gaussian', 0, 0.05); %加入了高斯噪声的图像
I = A;
M = 3;
I = im2double(I); %噪声图都转为浮点型
RGB = im2double(RGB); %原图转为浮点型
for i = 1: MI = imadd(I, RGB); %噪声和原图叠加
end
avg_A = I / (M+1); %叠加求均值
figure;
subplot(121),imshow(A);
subplot(122),imshow(avg_A);


7.2 图像的减法
图像减法也称为差分方法 , 是一种常用于检测图像变化及运动物体的图像处理方法.或是混合图像的分离。

clc;
clear all;A = imread('douluodalu1.jpg');
B = imread('douluodalu2.jpg');
C = imsubtract(A, B); %两幅图像相减
figure;
imshow(C);
D = imadd(A, B); %两幅图像相加
figure;
imshow(D);
figure;
subplot(121),imshow(D);
subplot(122),imshow(C);



7.3 图像乘法运算
一是实现掩膜操作,即屏蔽图像的某些操作 ; 二是如果一幅图像乘以一个常数因子,将改善图像的亮度
改善亮度。


A = imread('douluodalu.jpg');B = immultiply(A, 1.5);
C = immultiply(A, 0.5);
figure;
subplot(131);imshow(A);
subplot(132);imshow(B);
subplot(133);imshow(C);


7.4 图像的几何变换
图像的平移
move.m

move.mfunction J = move(I, a, b)
% 定义一个函数名为move, I表示输入图像,a和b描述图像沿着x轴和y轴移动的距离,
% 不考虑平移后,图像溢出的情况,找不到的地方都赋值为1
[M,N,G] = size(I);
I = im2double(I);
J = ones(M,N,G);
for i=1:Mfor j=1:Nif((i+a)>=1&&(i+a)<=M && (j+b)>=1&&(j+b)<=N);J(i+a, j+b, :)=I(i, j, :);endend
end
I = imread('douluodalu.jpg');
a = 200; b = 200;
J1 = move(I, a, b);a = -200; b = 200;
J2 = move(I, a, b);a = 200; b = -200;
J3 = move(I, a, b);a = -200; b = -200;
J4 = move(I, a, b);subplot(221),imshow(J1);
subplot(222),imshow(J2);
subplot(223),imshow(J3);
subplot(224),imshow(J4);

8 备注

版本:2014a

【基础教程】基于matlab图像处理(表示方法+数据结构+基本格式+类型转换+读取+点运算+代数运算)【含Matlab源码 834期】相关推荐

  1. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  2. 【Matlab指纹识别】指纹识别匹配门禁系统【含GUI源码 587期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别匹配门禁系统[含GUI源码 587期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  3. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  4. 【Matlab破损识别】机器视觉+SVM玉米种子破损识别(带面板)【含GUI源码 1651期】

    一.代码运行视频(哔哩哔哩) [Matlab破损识别]机器视觉+SVM玉米种子破损识别(带面板)[含GUI源码 1651期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考 ...

  5. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  6. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  7. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  8. 【Matlab图像检索】综合特征图像检索【含GUI源码 395期】

    一.代码运行视频(哔哩哔哩) [Matlab图像检索]综合特征图像检索[含GUI源码 395期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  9. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  10. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

最新文章

  1. java飞机大战爆炸效果_Java飞机大战游戏设计与实现
  2. (传送门)ubuntu 安装截图工具 Shutter,并设置快捷键 Ctrl+Alt+A
  3. 关于WebView 控件,你了解多少?
  4. Erlang --- 基本概念
  5. WSS学习(一)---简单部署图
  6. offset-list 和 prefix-list简介
  7. C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
  8. 清明节黑白效果=来聊聊色彩矩阵算法
  9. Android仓库管理系统
  10. S3C2440C语言点灯
  11. 首席新媒体黎想教程:如何打造爆款裂变活动推广?
  12. 人群密度算法_算法人群的力量。
  13. 为什么说JCLGMP必将带来更实实在在的就学等方面权益?
  14. 示波器的使用及其原理
  15. C#中DateTime.Ticks
  16. RabbitMq 虚拟主机 virtual-host ,Springboot 中使用 RabbitMq 虚拟主机 virtual-host
  17. 搭建B2B电子商务系统要怎么做
  18. Docker实践总结
  19. 最长上升子序列-python
  20. AirDisk产品S系列产品体验

热门文章

  1. zookeeper启动失败解决方法
  2. 运算符in和not in
  3. iphone NSString 字符串处理:截取字符串、匹配字符串、分隔字符串
  4. Backward_chaining
  5. [codevs 1503]愚蠢的宠物(特殊的LCA)
  6. java.lang.NoClassDefFoundError: com.mobclick.android.MobclickAgent
  7. oracle和sqlserver数据库直接生成xml
  8. hdu 2795 Billboard
  9. 黑马程序员 Python学习笔记 之 名片管理系统
  10. AR、VR、MR的那些事儿