数字图像处理常用Matlab函数

将图像数组转换为double型:im2double();

将图像数组转换为uint8型:im2uint8();

将图像数组转换为uin16型:im2unit16();

 

灰度图像->索引图像: [X,MAP] = gray2ind( I, [n]);

其中I表示存储灰度图像的变量,n表示颜色值(默认为64)

 

索引图象->灰度图像:I = ind2gray(X,MAP);

其中X表示图像矩阵,MAP表示颜色图数组变量

 

RGB彩色图像-》索引图象:[X,MAP] = grb2ind(RGB);

其中RGB参数表示存储RGB图像数据的变量。

 

索引图像->RGB彩色图像:RGB = ind2rgb(X,MAP);

其中X表示图像矩阵,MAP表示颜色图数组变量

 

RGB->灰度图像:I = rgb2gray(I_RGB);


图像的读取: imread('babbon.jpg');

返回矩阵大小: size(I);

返回矩阵的附加信息(如存储方式): whos I;

图像的写入: imwrite(I,'filename.png');

显示图像:imshow(I);

将索引图像、灰度图像、RGB彩色图像转换为二值图像:im2bw()

建立一个新的图像窗口: figure;

显示子图,并加上坐标轴:subimage();

获得图像的灰度直方图: imhist(I);

I = imread('1.jpg');
BW1 = im2bw(I);
BW2 = im2bw(I,0.3);
BW3 = im2bw(I,0.6);

figure
subplot(2,2,1),imshow(I);
title('original');
subplot(2,2,2),imshow(BW1);
title('\default');
subplot(2,2,3),imshow(BW2);
title('level = 0.3');
subplot(2,2,4),imshow(BW3);
title('level = 0.6');
I = imread('1.jpg');
g = rgb2gray(I); %彩色图像转化为灰度图像
figure
subplot(1,2,1),imhist(g);
subplot(1,2,2),imhist(g,64);


绘制归一化直方图

i = imread('1.jpg');
i = rgb2gray(i); %彩色图像转化为灰度图像
[m,n] = size(i);
[counts1, x] = imhist(i ,32);
%counts1保存的是落入每个灰度区间内的像素个数. 故用counts1除以图像中像素的总数就得到出现的概率
subplot(121), stem(x, counts1);%stem()函数是用来绘制针线图的
counts2 = counts1/m/n; %归一化
subplot(122), stem(x, counts2);


彩色图像的分量直方图

在彩色图像中,每个像素的颜色并不是简单的一个数值,而是由3个分量数值组成的一个向量。彩色图像的直方图,其实是对图像中所有像素的R、G、B分量分别统计得到的3个直方图。

i = imread('1.jpg');
[x,y,z] = size(i);

figure
subplot(221), imshow(i);
title('original image');

%提取红色分量
r = i;
%r(:,:,1) = i(:,:,1);
r(:,:,2) = zeros(x,y);
r(:,:,3) = zeros(x,y);
r = uint8(r);
subplot(222),imshow(r);
title('R-component-image');

%提取绿色分量
g = i;
g(:,:,1) = zeros(x,y);
%g(:,:,2) = i(:,:,2);
g(:,:,3) = zeros(x,y);
g = uint8(g);
subplot(223),imshow(g);
title('G-component-image');

%提取红色分量
b = i;
b(:,:,1) = zeros(x,y);
b(:,:,2) = zeros(x,y);
%b(:,:,3) = i(:,:,3);
b = uint8(b);
subplot(224),imshow(b);
title('B-component-image');

在上面的例子上再来做彩色图像的分量色彩直方图:

i = imread('1.jpg');
r = i(:,:,1);
g = i(:,:,2);
b = i(:,:,3);
subplot(1,3,1),imhist(r),title('R-component');
subplot(1,3,2),imhist(g),title('G-component');
subplot(1,3,3),imhist(b),title('B-component');


实现灰度均衡算法的函数 histeq()

i = imread('1.jpg');
i = rgb2gray(i);
LC = imadjust(i,[ ], [50/255;150/255]);
figure(1),subplot(221),imshow(LC);
title('low contrast');
figure(1),subplot(222),imhist(LC);%获得图像的灰度直方图
title('low contrast');
HE1 = histeq(LC);%对图像进行灰度均衡
figure(1),subplot(223),imshow(HE1);
title('histogram equalization');
figure(1),subplot(224),imhist(HE1);%获得图像的灰度直方图
title('histogram equalization');


 

这段代码是一个简单的热传导模拟程序,用于模拟热量在一个长方形材料中的传导过程。下面是对代码的解释: 1. `clear, clc`:清除命令窗口和工作区中的所有变量。 2. `k=0.082; r=300; c=1377; dt=0.1; dx=0.0001;`:定义了一些常数,包括热导率k、密度r、比热容c、时间步长dt和空间步长dx。 3. `alpha=k*dt/r/c/dx/dx;`:计算了一个常数alpha,用于计算热传导方程中的系数。 4. `A=alpha/2; B=1+alpha;`:定义了两个常数A和B,用于计算矩阵方程的系数。 5. `T_ahead=zeros(1,101); T_ahead(1:end)=37; T_ahead(1)=100;`:初始化了一个长度为101的数组T_ahead,并将其所有元素初始化为37。然后将第一个元素设置为100。 6. `n=1:3000; T50=zeros(1,3000); T50(1:end)=37;`:定义了一个包含3000个元素的数组n,并将其从1递增到3000。然后初始化了一个长度为3000的数组T50,并将其所有元素初始化为37。 7. `K=zeros(1,100); K_real=zeros(1,99);`:初始化了两个长度分别为100和99的数组K和K_real。 8. `F=zeros(99); FF=zeros(99); FF(logical(eye(size(F))))=A; F(logical(eye(size(F))))=-B;`:初始化了两个大小为99x99的矩阵F和FF,并将对角线上的元素设置为A和-B。 9. `AA=[zeros(98,1) FF(1:98,1:98);zeros(1,99)]; C=[zeros(1,99);FF(1:98,:)]; Total=F+AA+C;`:构建了一个大小为100x100的矩阵Total,用于解热传导方程的线性方程组。 10. `for time=1:3000`:开始一个循环,用于模拟3000个时间步长的热传导过程。 11. `for i=2:100`:开始一个内部循环,用于计算每个位置的温度变化。 12. `K(i)=-T_ahead(i)-A*(T_ahead(i+1)-2*T_ahead(i)+T_ahead(i-1));`:计算了热传导方程中的右侧项。 13. `K_real(i-1)=K(i); K_real(1)=K(2)-A*T_ahead(1); K_real(99)=K(100)-A*T_ahead(end);`:将右侧项存储到K_real数组中。 14. `resolve=inv(Total)*K_real';`:解线性方程组,得到温度分布的解。 15. `x_real=[T_ahead(1);resolve;T_ahead(end)];`:将解的结果存储到x_real数组中。 16. `T_ahead=x_real; T_ahead(1)=100; T_ahead(end)=37;`:更新温度分布数组T_ahead,并将边界温度设置为100和37。 17. `x=1:101; y=1:2; P=meshgrid(T_ahead,y);`:创建网格矩阵P,用于绘制三维视图和正视图。 18. `subplot(1,3,1) surf(x,y,P),title('三维视图')`:绘制三维视图,并将其放在第一个子图中。 19. `subplot(1,3,2) surf(x,y,P),view(0,0),title('正视图')`:绘制正视图,并将其放在第二个子图中。 20. `subplot(1,3,3) plot(n,T50),title('中心点温度历程') xlabel('时间/s'),ylabel('温度'),axis([0 3000 35 60])`:绘制中心点温度随时间的变化曲线,并将其放在第三个子图中。 21. `set(gcf,'unit','centimeters','position',[2 5 30 8])`:设置图形窗口的大小和位置。 22. `drawnow`:立即更新图形窗口。 23. `T50(time)=T_ahead(50); T_ahead(50)`:将中心点的温度存储到数组T50中,并输出中心点的温度。 这段代码主要用于模拟热传导过程,并通过绘图展示温度分布和中心点的温度随时间的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值