MATLAB数字图像小系统
图像读入
- 从图形文件中读入图像 imread
Syntax: A = imread(filename, fmt)
filename:指定的灰度或彩色图像文件的完整路径和文件名。
fmt:指定图形文件的格式所对应的标准扩展名。如果imread没有找到filename所制定的文件,会尝试查找一个名为filename.fmt的文件。
A:包含图像矩阵的矩阵。对于灰度图像,它是一个M行N列的矩阵。如果文件包含 RGB真彩图像,则是m*n*3的矩阵。
- 对于索引图像,格式[X, map] = imread(filename, fmt)
X:图像数据矩阵。
MAP:颜色索引表
图像的显示
- imshow函数:显示工作区 或图像文件中的图像
- Syntax:
imshow(I) %I是要现实的灰度图像矩阵
imshow(I,[low high],param1, val1, param2, val2,...) %I是要现实的灰度图像矩阵,指定要显示的灰度范围,后面的参数指定显示图像的特定参数
imshow(RGB)
imshow(BW)
imshow(X,map) %map颜色索引表
imshow(filename)
himage = imshow(...)
- 操作:读取并显示图像
I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读取图像数据
imshow(I);%显示原图像
图像增强
一.图像的全局描述
直方图(Histogram):是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。
图像直方图(Image Histogram):是表示数字图像中亮度分布的直方图,用来描述图象灰度值,标绘了图像中每个亮度值的像素数。
灰度直方图:是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。描述了一幅图像的灰度级统计信息。是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率。
归一化直方图:直接反应不同灰度级出现的比率。纵坐标表示具有各个灰度级别的像素在图像中出现的概率。
图像的灰度直方图:是一个离散函数,表示图像每一灰度级与该灰度级出现概率的对应关系。
图像的灰度直方图运算: imhist()函数,其横坐标表示像素的灰度级别,纵坐标为像素点的个数。
- Imhist函数=Display histogram of image data显示灰度直方图的函数
- Syntax:
- imhist(I) % I为要计算的灰度直方图图像
- imhist(I, n) % n指定的灰度级的数目,表示所有灰度级均匀分布在n个小区间内。
- imhist(X, map)
- [counts,x] = imhist(...) %counts直方图数据向量。counts(i)第i个灰度区间中的像素数目。x是保存了对应的灰度小区间的向量。
注意:若调用时不接受这个函数的返回值,则直接显示直方图;在得这些返回数据之后,也可以使用stem(x,counts)手绘直方图。
- 例1:显示某一图像的灰度直方图
I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读入图像
imhist(I) %显示图像的灰度直方图
- 例2:显示原图像和图像的灰度直方图
I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读入图像
figure;
imshow(I); %显示原始图像
title('source');
figure;
imhist(I); %显示图像的灰度直方图
title('graph');
注意:这里显示的是未经归一化的灰度直方图,纵轴表示图像中所有像素取到某一特定灰度值的次数,横轴表示所有灰度值。
- 例3:归一化直方图
I=imread('C:\Users\fanjinfei\Desktop\baby.bmp'); %读入原图像
figure; %打开新窗口
[M,N]=size(I); %计算图像大小
[counts,x] = imhist(I,32) ; %计算有32个小区间的灰度直方图
counts=counts/M/N; %计算归一化灰度直方图各区间的值
stem(x,counts) %绘制归一化直方图
注意:counts保存了落入每个区间的像素个数.
图像归一化:就是将图像转换成唯一的标准形式,消除同类图像不同变形体之间的外观差异。
二.直方图均衡化
目的:通过某种灰度映射,使输入图像转换为在每个灰度级上都具有近似相同的像素点数的输出图像。(输出的直方图均匀)
结果:使图像具有较高的对比度和较大的动态范围。
- Histeq函数:Enhance contrast using histogram equalization直方图均衡化
- Syntax:[J, T] = histeq(I) %I是原始图像;J是直方均衡化的输出图像,T是变换矩阵
- 例:利用直方图均衡化来实现图像的灰度归一化。Matlab的实现:
I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读入图像
I=im2double(I);
%对比度变大的图像
I1=2*I-55/255;
subplot(4,4,1);
imshow=(I1);
subplot(4,4,2);
imhist=(I1);
subplot(4,4,3);
imshow=(histeq(I1));
subplot(4,4,4);
imhist=(histeq(I1));
一.滤波操作:【相关函数imfilter和fspecial】
1.函数imfilter:完成滤波操作。
- 函数原型:g=imfilter(f,w,option1,option2,.....)
- 参数:
f:进行滤波操作的图像;
w:滤波操作使用的模版,为一个二维数组;
option1,option2,...:可选项。
返回值:g为滤波后输出的图像。
【其中可选项:
- 边界选项:采用固定值填充虚拟边界,会使边缘附近产生梯度
‘replicate’:填充虚拟边界的内容总是重复与它最近的边缘像素。
- 尺寸选项:由于滤波中填充了边界,有必要指定输出图像g的大小。
- 模式选项:滤波过程是相关还是卷积。
‘corr’:相关
‘conv’:卷积】
- 线性滤波过程
f=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读入图像
figure;
imshow(f);
w=[1 1 1 ;1 1 1;1 1 1;1 1 1]/9
g=imfilter(f,w,'corr','replicate');%l滤波
figure;
figure,imshow(g);
2.函数fspecial:为我们创建一些预定义的2维滤波器,直接供函数imfilter使用。
- 调用格式:h=fspecial(type,parameters)
- 参数:
type:指定滤波器类型。如’average’:平均模版
parameters:可选项。
返回值:h为特定滤波器。
- 举例:
- h=fspecial(‘average’,hsize) %返回一个大小为hsize的平均模板滤波器。
- h=fspecial(‘disk’,radius) %返回一个大小为半径为radius的圆形平均模板。
- h=fspecial(‘gaussian’,hsize,sigma) %返回一个大小为hsize,标准差sigma的高斯低通滤波器。
- h=fspecial(‘sobel’) %返回一个加强水平边缘竖直梯度算子。
subplot=Create axes in tiled positions建立坐标轴
Syntax:subplot(m,n,p)
im2double=Convert image to double precision将图像转换成双精度
Syntax:
I2 = im2double(I)
RGB2 = im2double(RGB)
I = im2double(BW)
X2 = im2double(X,'indexed')
注意:
I=imread('C:\Users\fanjinfei\Desktop\picture.png');%读取图像数据
n=length(I);
figure;
imshow('I');%显示原图像
%产生噪声图像
theta_noise=15;%噪声方差(可设为其他值)-------------------------------------------
%noise_sig_truth = 20; % sigma_n used in the paper. This parameter is adjusted by the user.
noise_mu = 0;
noise=randn(size(I)) .* theta_noise + noise_mu;
Inoise=double(I) + noise;
figure;
imshow(Inoise,[]);%显示带噪图像
%小波滤波器选择 这个是调用滤波器函数,但是仿真出错
qmf=MakeONFilter('Daubechies',8);%Daubechies8小波(可设为其他小波)-----------------
L=5;%分解层数=log2(n)-L
[InoiseNorm,coef] = NormNoise2(Inoise,qmf);%归一化,这个一直出现问题是怎么回事?
wc=FWT2_PO(InoiseNorm,L,qmf);%这个也没有
%--------------------------VisuShrink方法-----------------------------------------
%wc = MultiVisu2(wc,L);
%---------------------------------------------------------------------------------
%--------------------------SUREShrink方法-----------------------------------------
wc = MultiSURE2(wc,L);
图像去噪
canny边缘检测
I=imread('lena.bmp'); %读灰度图lena.bmp
%Canny edge detector
th=[0.05 0.2];
E=edge(I,'canny',th);
E=uint8(255*(1-double(E)));
figure('name','canny'),imshow(uint8(E),'truesize');
sobel边缘检测
I=imread('lena.bmp'); %读灰度图lena.bmp
%sobel edge detector
E=edge(I,'sobel',0.08);
E=uint8(255*(1-double(E)));
figure('name','canny'),imshow(uint8(E),'truesize');
练习:
%读取原始图像
I=imread('C:\Users\fanjinfei\Desktop\picture.png');%读取图像数据
n=length(I);
figure;
imshow(I),title('原图') %显示原图像
%缩小图像
J = imresize(I,0.5);%将图像缩小至0.5倍
figure;
imshow(J),title('0.5 倍图') %显示缩小后的图像
%显示尺寸
[mrows,mcols] = size(I) %查看原始的尺寸大小
[mrows,mcols] = size(J) %查看缩放图像的尺寸大小
%放大图像
K= imresize(I,1.5); %将图像放大 1.5 倍
figure;
imshow(K),title('1.5 倍图') %显示放大后的图像
%设置尺寸
M = imresize(I,[250,600]);%设置图像的尺寸大小
figure;
imshow(M),title('250*600 图')
%逆时针旋转图像
I45 = imrotate(I, 45);%对图像逆时针旋转 45 度
figure;
imshow(I45),title('逆时针 45 度') %显示逆时针旋转后的图像
%逆时针旋转图像
I45 = imrotate(I, -45);
figure;
imshow(I45),title('顺时针 45 度')
%对图像逆时针旋转 180 度,即反转
IR = imrotate(i, 180);
figure;
imshow(iR),title('反转')
%裁剪图像,读入图像文件,然后调用命令,进入裁剪阶段。【没完成】
I=imread('C:\Users\fanjinfei\Desktop\picture.png');%读取图像数据
n=length(I);
figure;
imshow(I),title('原图') %显示原图像
I_crop = imcrop(I) %会显示进入裁剪界面
Imshow(I_crop),title('裁剪后') %显示裁剪的图像
图像的灰度变换
I=imread('C:\Users\fanjinfei\Desktop\picture.png');%读取图像数据
figure;
imshow(I),title('原图') %显示原图像
imhist(I)
图像去雾
clc
rgb=imread('image processing\fog\fog.jpg');
% 对饱和度与亮度进行histeq处理
hsv=rgb2hsv(rgb);
h=hsv(:,:,1);
s=hsv(:,:,2);
v=hsv(:,:,3);
S=histeq(s);
V=histeq(v);
result_hsv=hsv2rgb(h,S,V);
% 对RGB每个通道进行histeq处理
r=rgb(:,:,1);
g=rgb(:,:,2);
b=rgb(:,:,3);
R=histeq(r);
G=histeq(g);
B=histeq(b);
result_rgb=cat(3,R,G,B);
% 对YCbCr的亮度进行histeq处理
ycbcr=rgb2ycbcr(rgb);
y=ycbcr(:,:,1);
cb=ycbcr(:,:,2);
cr=ycbcr(:,:,3);
Y=histeq(y);
result_ycbcr=ycbcr2rgb(cat(3,Y,cb,cr));
% 结果显示
figure
subplot(2,2,1),imshow(rgb),title('原始图像')
subplot(2,2,2),imshow(result_hsv),title('HSV')
subplot(2,2,3),imshow(result_rgb),title('RGB')
subplot(2,2,4),imshow(result_ycbcr),title('YCbCr')
MATLAB数字图像小系统相关推荐
- MATLAB数字图像小程序设计
目录 设计目的-------..-------.----2 设计要求-------.----------.-.2 设计的内容------..---------.--2 课题分析------------ ...
- MATLAB simulink小电流系统单相接地故障选线仿真模型
MATLAB simulink小电流系统单相接地故障选线仿真模型(2020a版本) 有中性点不接地,中性点经消弧线圈接地,中性点经小电阻接地. 可读取零序电流,零序电压,三相电压波形图. 其中经消弧线 ...
- MATLAB/simulink小电流系统单相接地故障选线仿真模型
MATLAB/simulink小电流系统单相接地故障选线仿真模型(2020a版本) 有中性点不接地,中性点经消弧线圈接地,中性点经小电阻接地. 可读取零序电流,零序电压,三相电压波形图. 其中经消弧线 ...
- MATLAB/simulink小电流系统单相接地故障选线仿真模型 有中性点不接地,中性点经消弧线圈接地,中性点经小电阻接地
MATLAB/simulink小电流系统单相接地故障选线仿真模型(2020a版本) 有中性点不接地,中性点经消弧线圈接地,中性点经小电阻接地. 可读取零序电流,零序电压,三相电压波形图. 其中经消弧线 ...
- MATLAB/simulink小电流系统单相接地故障选线仿真模型(2020a版本) 有中性点不接地,中性点经消弧线圈接地,中性点经小电阻接地
MATLAB/simulink小电流系统单相接地故障选线仿真模型(2020a版本) 有中性点不接地,中性点经消弧线圈接地,中性点经小电阻接地. 可读取零序电流,零序电压,三相电压波形图. 其中经消弧线 ...
- 【Matlab系列】一维信号/数字图像小波阈值去噪(软阈值,硬阈值,固定阈值)【含Matlab源码】
Date: 2022.4.23 文章目录 前言 0.代码获取方式 1.部分matlab代码 2.一维信号小波阈值去噪效果图 3.数字图像小波阈值去噪效果图 3.1.添加高斯噪声 3.2.添加随机噪声 ...
- 基于MATLAB的数字图像水印系统
基于MATLAB的数字图像水印系统 摘要:介绍了数字水印的原理和应用方法,研究了基于离散余弦变换(DCT)的数字图像水印算法,并借助MATLAB编S-Y-具,实现数字水印的嵌入.提取和攻击测试.实验结 ...
- 小电流系统A相MATLAB仿真,MATLAB对小电流接地系统单相故障的仿真
MATLAB对小电流接地系统单相故障的仿真 在小电流接地系统中发生单相接地时,虽然故障点电流很小对负荷的供电没有太多影响,但是其他两相的接地电压升高了, (本文共3页) 阅读全文>> 小电 ...
- MATLAB指纹识别系统GUI界面实现
MATLAB指纹识别系统GUI界面实现 课题背景 人的指纹各不相同,指纹可以用来确定人的身份,指纹识别技术作为最传统.最成熟的生物识别方式之一,已经在很多领域得以应用.如何对指纹的基本特征进行有效提取 ...
- MATLAB数字图像处理系统-形状分类
MATLAB数字图像处理系统-形状分类 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人 ...
最新文章
- spark无法与服务器建立稳定连接,无法在Spark中将从站连接到主站
- 节能原理 复习(能量平衡+热电联产+联合循环)
- pdm生成mysql sql语句_如何用Powerdesigner的PDM生成数据库
- 指令重排与jvm底层实现
- “软件宝宝”出生前,安全系列文章(一)
- background 旋转_基于HTML5 Canvas实现工控2D叶轮旋转
- php接口返回一个数组怎末写_php api返回json数组
- quartz的job类无法保留本身通过spring注入的属性问题
- Operators一句话介绍(RxJava版)
- 倍周期分岔 matlab,由倍周期分岔走向混沌-Read.DOC
- 快速排序的C++实现
- 算法笔记_039:杨辉三角形(Java)
- 图论算法——加权有向图的数据结构
- 双缝干涉实验,在双缝之后加一个反射,会怎样
- [Swift]添加暂无数据和暂无网络缺省页
- 如何让自己像打王者荣耀一样疯狂且不知疲倦地学习?
- 数学专业考研计算机,过来人谈数学专业考研:万学之基 万物皆数也
- 6张图教你搞定侧方停车----fwqlzz love is for ever
- socket与sock的联系
- Deus Ex:人类革命 - 图形研究