首页 > 电脑常识 > 电脑常识

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

admin 电脑常识 2021-04-27 10:13:52  
后台-系统设置-扩展变量-手机广告位-内容正文底部

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: 65240
                       Format: 'tif'
                FormatVersion: []
                        Width: 256
                       Height: 256
                     BitDepth: 8
                    ColorType: 'grayscale'
              FormatSignature: [77 77 0 42]
                    ByteOrder: 'big-endian'
               NewSubFileType: 0
                BitsPerSample: 8
                  Compression: 'PackBits'
    PhotometricInterpretation: 'BlackIsZero'
                 StripOffsets: [1x8 double]
              SamplesPerPixel: 1
                 RowsPerStrip: 32
              StripByteCounts: [1x8 double]
                  XResolution: 72
                  YResolution: 72
               ResolutionUnit: 'Inch'
                     Colormap: []
          PlanarConfiguration: 'Chunky'
                    TileWidth: []
                   TileLength: []
                  TileOffsets: []
               TileByteCounts: []
                  Orientation: 1
                    FillOrder: 1
             GrayResponseUnit: 0.0100
               MaxSampleValue: 255
               MinSampleValue: 0
                 Thresholding: 1
                       Offset: 64872
             ImageDescription: '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: M
    I = 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.m
 
function 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:M
    for j=1:N
        if((i+a)>=1&&(i+a)<=M && (j+b)>=1&&(j+b)<=N);
            J(i+a, j+b, :)=I(i, j, :);
        end
    end
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 备注

完整代码或者代写添加QQ 1564658423

文章来源:https://blog.csdn.net/TIQCmatlab/article/details/116137092

后台-系统设置-扩展变量-手机广告位-内容正文底部
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
本文地址:https://jcdi.cn/diannaochangshi/diannaochangshi/930.html

留言与评论(共有 0 条评论)
   
验证码:
后台-系统设置-扩展变量-手机广告位-评论底部广告位

教程弟

https://www.jcdi.cn/

统计代码 | 京ICP1234567-2号

Powered By 教程弟 教程弟

使用手机软件扫描微信二维码