彩色图转灰度图 matlab 实现代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档