彩色图转灰度图 matlab 实现代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一):彩色图像转灰度图
1、设计任务
1) 读入彩色和灰度图像并显示;
2) 对彩色图像转化为灰度图像并显示;
3) 比较两种方法的效果。
2、设计目的
1) 掌握彩色图转灰度图的基本原理与方法;
2) 初步掌握MATLAB的使用方法;
3) 了解MATLAB在数字信号处理,尤其是图像处理中显现出来的优势。
3、源代码
% 把RGB格式的图片转换为YUV格式。
clear; clc;
x=imread('lena512.BMP');
[line,row,dim]=size(x);
x1=double(x); % 数据类型转换
subplot(1,3,1) % 分割当前绘图窗口为(1,3)的区域,显示此图片与1号区域imshow(uint8(x)) % 数据类型转换,并且显示当前图片
title('原图');
% 矩阵乘,根据【RGB】转【YUV】关系转灰度图
Y1=0.299*x(:,:,1)+0.587*x(:,:,2)+0.114*x(:,:,3);
y1=[round(Y1)]; % 取整
subplot(1,3,2)
imshow(uint8(y1))
title('根据各分量转换关系转换后图片');
% 求RGB各个分量均值转灰度图
Y2=(x(:,:,1)+x(:,:,2)+x(:,:,3))/3;
y2=[round(Y2)];
subplot(1,3,3)
imshow(uint8(y2))
title('求均值转换后图片');
图片无法显示哈。
图(1)彩色转灰度图程序运行结果
4、结果分析
由运行结果可以看出,根据RGB到YUV各个分量关系转换得到的灰度图比较真实,而用简单的求RGB各个分量的均值转弧度图,其结果很不理想,图片基本看不清楚原来的轮廓。
(二):对灰度图像实现按比例缩小和放大
1、设计任务
1) 对灰度图实现在行上k1=0.6,列上k2=0.75的按比例缩小;
2) 对灰度图实现在行上k1=1.2,列上k2=1.5的按比例放大;
2、设计目的
1) 掌握图像的放大和缩小原理;
2) 用MATLAB实现图像的按比例放大和缩小;
3) 明白图像的放大和缩小并不是简单的互为逆过程。
3、源代码
(1)图像按比例缩小源代码
% 图像按比例缩小
clear; clc;
X=imread('house.BMP'); % 读取图片
[line,row]=size(X);
x=double(X);
subplot(1,2,1)
imshow(uint8(x))
title('原图');
%图片缩小
k1=0.6;
k2=0.75; % k1,k2分别表示在行和列上缩小的倍数
l_f=1:line;
r_f=1:row;
m=round(line*k1);
n=round(row*k2); % (m,n)表示缩小后的图片的大小
G=zeros(m,n); % 初始化缩小后图像矩阵
for l_n=1:m;
for r_n=1:n;
l_f=round(l_n./k1);
r_f=round(r_n./k2);
if l_f>=256;
G(l_n,r_n)=x(256,r_f); % 当l_n=154时,l_f>256,越界处理,
% 而当r_n=192时,r_f=256,恰好为边界值,不产生越界。
else
G(l_n,r_n)=x(l_f,r_f); %缩小后图片赋值
end
end
end
subplot(1,2,2)
imshow(uint8(G))
title('缩小后的图片');
图(2)图片缩小程序运行结果
(2)图片按比例放大源代码
% 图像按比例放大
clear
clc
X=imread('splash.BMP');
[line,row]=size(X);
x=double(X);
figure(1) % 绘图窗口1
imshow(uint8(x))
title('原图');
%图片放大
k1=1.2;
k2=1.5; % k1,k2分别表示在行和列上放大的倍数
l_f=1:line;
r_f=1:row;
m=round(line*k1);
n=round(row*k2); % (m,n)表示放大后的图片的大小
G=zeros(m,n); % 初始化放大后图像矩阵
for l_n=1:m;
for r_n=1:n;
l_f=round(l_n./k1);
r_f=round(r_n./k2);
G(l_n,r_n)=x(l_f,r_f); % 放大后图片赋值
end
end
figure(2) % 绘图窗口2
imshow(uint8(G))
title('放大后的图片');
图(3—1)图片放大程序运行结果图(3—2)图片放大程序运行结果
4、结果分析
图片缩小后,由于在行和列上分别用了不同的缩小比例,所以缩小后的图片在行列上的像素个数与原图片不同,原图片house.BMP大小为256*256,而缩小后的图片大小为154*192。在缩小过程中,图片像素点下标出现了越界现象,处理方法是,将离它最近的像素点赋值给相应位置;
图(3—1)为原图片,图(3—2)为放大后的图片。因为在行和列上有了不同的放大倍数,原图片splash.BMP大小为512*512,放大后的图片大小为614*768。