MATLAB图像处理常用命令和基本操作

一、实验目的

   1、熟悉并掌握MATLAB工具的使用;

2、实现图像的读取、显示、代数运算和简单变换。

二、实验环境

MATLAB 2016以上版本、WIN XP或WIN2000计算机

三、常用函数和调用格式

1.读写图像文件

1)imread

imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif')

2)imwrite

imwrite函数用于写入图像文件,如:imwrite(a,'e:\w02.tif',’tif’)

3)imfinfo

imfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:\w01.tif')

2.图像的显示

1)image

image函数是MATLAB提供的最原始的图像显示函数,如:

a=[1,2,3,4;4,5,6,7;8,9,10,11,12];

image(a);

2)imshow

imshow函数用于图像文件的显示,如:

i=imread('e:\w01.tif');

imshow(i);

title(‘原图像’)%加上图像标题

3)colorbar

colorbar函数用显示图像的颜色条,如:

i=imread('e:\w01.tif');

imshow(i);

colorbar;

4)figure

figure函数用于设定图像显示窗口,如:figure(1); /figure(2);

5)subplot

把图形窗口分成多个矩形部分,每个部分可以分别用来进行显示。

Subplot(m,n,p)分成m*n个小窗口,在第p个窗口中创建坐标轴为当前坐标轴,用于显示图形。

6)plot

绘制二维图形

plot(y)

Plot(x,y)xy可以是向量、矩阵。

3.图像类型转换

1)rgb2gray

把真彩图像转换为灰度图像

i=rgb2gray(j)

2)im2bw

通过阈值化方法把图像转换为二值图像

I=im2bw(j,level)

Level表示灰度阈值,取值范围0~1(即0.n),表示阈值取自原图像灰度范围的n%

3)imresize

改变图像的大小

I=imresize(j,[m n])将图像j大小调整为m行n列

4.图像运算

1)imadd

两幅图像相加,要求同样大小,同种数据类型

Z=imadd(x,y)表示图像x+y

2)imsubstract

两幅图像相减,要求同样大小,同种数据类型

Z=imsubtract(x,y)  表示图像x-y

3)immultiply

Z=immultiply(x,y)  表示图像x*y

4)imdivide

Z=imdivide(x,y)  表示图像x/y

读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口(1行三列)来分别显示RGB图像和灰度图像,注上文字标题。

代码:

读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口(1行三列)来分别显示RGB图像和灰度图像,注上文字标题。
代码:
% 图片文件名为image3.jpg,并且该文件位于E盘的photo文件夹中
imageFilePath = 'E:\photo\image3.jpg'; % 这里的文件名与实际文件名相匹配
 
% 读取RGB图像
rgbImage = imread(imageFilePath);
 
% 检查图像是否成功读取
if isempty(rgbImage)
    error('无法读取图像文件,请检查文件路径是否正确。');
end
 
% 将RGB图像转换为灰度图像
grayImage = rgb2gray(rgbImage);
 
% 使用默认的方法将灰度图像转换为二值图像
binaryImage = imbinarize(grayImage);
 
% 创建一个1行3列的子窗口布局
subplot(1, 3, 1);
% 显示RGB图像,并添加标题
imshow(rgbImage);
title('原图像');
 
% 在第二个子窗口中显示灰度图像,并添加标题
subplot(1, 3, 2);
imshow(grayImage);
title('灰度图像');
 
% 在第三个子窗口中显示二值图像,并添加标题
subplot(1, 3, 3);
imshow(binaryImage);
title('二值图像');

对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成六个子窗口(24列)来分别显示,注上文字标题。

% 有两个图像,image3和image4,它们已经被加载到内存中
% 这里使用imread函数读取图像文件
image1 = imread('E:\photo\image3.jpg');
image2 = imread('E:\photo\image4.jpg');
 
% 检查两个图像的尺寸是否相同,如果不同,则需要进行调整
if size(image1) ~= size(image2)
    % 通过插值方法调整图像2的尺寸以匹配图像1的尺寸
    image2 = imresize(image2, size(image1));
end
 
% 创建一个2行4列的子窗口布局
% 第一行显示原始图像和加法结果
subplot(2, 4, 1);
imshow(image1);
title('Image 1');
 
subplot(2, 4, 2);
imshow(image2);
title('Image 2');
 
% 执行加法操作并显示结果
sumImage = image1 + image2;
subplot(2, 4, 3);
imshow(sumImage, []);
title('Addition (加法)');
 
% 执行减法操作并显示结果
differenceImage = image1 - image2;
subplot(2, 4, 4);
imshow(differenceImage, []);
title('Subtraction (减法)');
 
% 执行乘法操作并显示结果
productImage = image1 .* image2;
subplot(2, 4, 5);
imshow(productImage, []);
title('Multiplication (乘法)');
 
% 执行除法操作并显示结果
% 为了避免除以零的错误,我们首先检查图像2中是否有零值
epsilon = 1e-6; % 一个小的数,用来避免除以零
image2(image2 == 0) = epsilon; % 将零值替换为epsilon
quotientImage = image1 ./ image2;
subplot(2, 4, 6);
imshow(quotientImage, []);
title('Division (除法)');

对一幅图像进行灰度变化,实现图像变亮、变暗和负片效果,在同一个窗口内分成四个子窗口(22列)来分别显示,注上文字标题。

% 读取彩色图像
image = imread('E:\photo\image3.jpg'); % 替换为图像文件路径
 
% 图像变亮
% 通过增加一个常数来增加图像的亮度,注意避免超过RGB范围
brightenedImage = uint8(image + 50);
brightenedImage(brightenedImage > 255) = 255; % 限制最大值为255
 
% 图像变暗
% 通过减少一个常数来降低图像的亮度,注意避免低于0
darkenedImage = uint8(image - 100);
darkenedImage(darkenedImage < 0) = 0; % 限制最小值为0
 
% 负片效果
% 通过从最大值(255)中减去每个颜色通道的值来实现负片效果
negativeImage = 255 - image;
 
% 创建一个2行2列的子窗口布局
subplot(2, 2, 1);
imshow(image);
title('原图像');
 
subplot(2, 2, 2);
imshow(brightenedImage);
title('图像变亮');
 
subplot(2, 2, 3);
imshow(darkenedImage);
title('图像变暗');
 
subplot(2, 2, 4);
imshow(negativeImage);
title('负片效果');

 MATLAB 编制程序,产生并输出以下各种序列的图形(两幅图,分别22列显示)

① 单位冲击序列(长度为41);

② 单位阶跃序列(长度为41)

③ 正弦序列xn = A ∙ sin[2πfn + (2/3)π],f = 0.5,A =-0.2,  -10 < �� < 10 (n间隔为0.01)

④ 指数序列xn = 1.1n   -20 < n < 20  (n 间隔为 0.5)

⑤ 复指数序列xn = 4 ∗ e(-0.2+j0.5)n,-40 < n < 40,输出其实部(real), 虚部(imag), 幅值(abs)和

相位(angle)的图形。(exp)

% 初始化图形窗口
figure;
 
% ① 单位冲击序列 (长度为 41)
n = 0:40;
impulseSequence = zeros(1, 41);
impulseSequence(18) = 1; % 在第21个位置放置单位冲击
impulseSequence(22) = 1; % 在第21个位置放置单位冲击
subplot(2, 2, 1); % 第一个子图
stem(n, impulseSequence);
title('单位冲击序列');
 
% ② 单位阶跃序列 (长度为 41)
stepSequence = zeros(1, 41);
stepSequence(21:end) = 1; % 从第21个位置开始为1
subplot(2, 2, 2); % 第二个子图
stem(n, stepSequence);
title('单位阶跃序列');
 
% ③ 正弦序列
n = -10:0.01:9.99;
A = -0.2;
f = 0.5;
sinSequence = A * sin(2 * pi * f * n + (2/3) * pi);
subplot(2, 2, 3); % 第三个子图
plot(n, sinSequence);
title('正弦序列');
 
% ④ 指数序列
n = -20:0.5:19.5;
exponentialSequence = 1.1 .^ n;
subplot(2, 2, 4); % 第四个子图
plot(n, exponentialSequence);
title('指数序列');

% 初始化图形窗口
figure;
 
% 复指数序列的定义
n = -40:1:39; % 从-40到39,间隔为1
A = 4; % 系数A
alpha = -0.2 + 1i * 0.5; % 复频率
 
% 生成复指数序列
complexExponential = A * exp(1i * alpha * n);
 
% 绘制实部
subplot(2, 2, 1); % 第一个子图
plot(n, real(complexExponential));
title('实部');
 
% 绘制虚部
subplot(2, 2, 2); % 第二个子图
plot(n, imag(complexExponential));
title('虚部');
 
% 绘制幅值
subplot(2, 2, 3); % 第三个子图
magnitude = abs(complexExponential);
plot(n, magnitude);
title('幅值');
 
% 绘制相位
subplot(2, 2, 4); % 第四个子图
phase = angle(complexExponential);
plot(n, phase);
title('相位');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值