logo资料库

数字图像处理上机作业二(直方图均衡化).doc

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
数字图像处理第二次作业 数字图像第二讲作业 1. 设计一个程序,对一幅灰度图像实现直方图均衡化处理。画出均 衡化前后的图像及其直方图. 分析:要实现对一幅灰度图直方图的均衡化处理,须经四步来完成。首先,获 得直方图,及各灰度值对应像素数占总像素数的比例,用矩阵 c 表示,这是第一 次直方图作业的内容。第二步对 c 求累加和,得到 s 矩阵。第三步,对 s 进行合 理的近似,得到均衡图中的灰度等级。这里我的处理办法是对 s 执行 s*255 操作, 得到的值再取 uint8(),这样就实现了对 s*255 的合理近似,即四舍五入,从而得 到了新的灰度等级 d。第四步,赋予各像素点新的灰度值,计算出不同灰度等级 对应的比例值 Ps(sk),这里我用: for j=1:256 p(d(j)+1)=p(d(j)+1)+c(j); I2(find(I==j))=d(j); end 来求得 Ps(sk),循环的作用是将灰度等级 d(j)相同的各 j 对应的原灰度值比例 c 累加起来。I2(find(I==j))=d(j)是将灰度值为 j 的像素点的灰度值换为 d(j);p(d(j)+1) 中加 1 的作用是避免出现 p(0)而进行的处理。 代码及注释如下: function junheng(x) % x 为要分析的图像名加单引号 I=imread(x); b=size(I); a=zeros(1,256); 的个数 for m=1:b(1) for n=1:b(2) %a 为一个 1*256 的矩阵分别记录灰度为 0 到 255 的像素 %两个 for 语句将整张图的所有像素都扫描一遍 a(I(m,n)+1)= a(I(m,n)+1)+1; % 将 灰 度 为 I(m,n) 的 像 素 个 数 存 储 在 %a(I(m,n)+1)中,因为 matlab 里没有 a(0) end end n=0:255; c=a/sum(a); %c 为个灰度像素数占总像素数的比例 第 1 页 共 15 页
%画出直方图 %s 为 Pr(rk)的累加和 %画出 sk 的图形 %d 是对 s 的合理近似值,即四舍五入 数字图像处理第二次作业 subplot(2,2,1);bar(n,c);title('直方图 Pr(rk)'); s=zeros(1,256); s(1)=c(1); for k=2:256 s(k)=s(k-1)+c(k); end subplot(2,2,2);bar(n,s);title('sk'); d=uint8(s*255); p=zeros(1,256); I2=I*0; for j=1:256 p(d(j)+1)=p(d(j)+1)+c(j); I2(find(I==j))=d(j); %画出均衡化直方图 %以 d 为灰度值,计算相同 d 值对应的 c 值的累加和 f end imwrite(I2,'junheng.bmp'); subplot(2,2,3);bar(n,p);title('均衡化直方图 Ps(sk)') figure; bar(n,c);title('直方图 Pr(rk)'); figure; bar(n,p);title('均衡化直方图 Ps(sk)') figure; subplot(1,2,1);imshow(x);title('原图'); subplot(1,2,2);imshow('junheng.bmp');title('均衡后图');%显示均衡化之后图形 运行:在命令窗口中输入 junheng(‘Lenna.bmp’),输出如下四幅图: %单独显示均衡后直方图 %单独显示直方图 %显示原图 第 2 页 共 15 页
数字图像处理第二次作业 这幅图体现了整个程序设计的思路,先由直方图 Pr(rk)到累加和的 sk 图形,最后 到均衡图 Ps(sk). 这两幅图是单独显示的原直方图和均衡化后的直方图。由图可以看出均衡化之后 第 3 页 共 15 页
数字图像处理第二次作业 直方图灰度值动态范围增加了,分布比较均衡。 这两幅图是原始图像和均衡化之后图像的比较,发现均衡化之后图像变亮了。整 体图像给人一种清晰的感觉。 结论:均衡化之后图像变亮了,整体图像给人一种清晰的感觉。直方图灰度值 动态范围增加了,分布比较均衡。 2. 设计一个程序,绘制一幅灰度图像的梯度幅度图像,选择适当的阈 值将其二值化. 分析:1.灰度图像的梯度图其实就是图像的边缘图像,绘制一幅图像的梯度图 像,可采用公式 f(x,y)=max(|f(x,y)-f(x+1,y)|,|f(x,y)-f(x,y+1)|),也就是水平方向相邻 像素之差和垂直方向相邻像素之差的绝对值中的最大者。 2.为了更好地显示梯度图,可以选择适当的阀值将其二值化,首先,画 出没有二值化的梯度图的直方图以便确定二值化阀值的范围,并在给范围内选择 一 效 果 比 较 好 的 阀 值 , 这 里 我 取 235 , 进 行 二 值 化 处 理 。 二 值 化 代 码 为 I2=(I2-235)*255;大于 235 的全部变为 255,小于 235 的全部变为 0。 第 4 页 共 15 页
数字图像处理第二次作业 代码及注释如下: function tidu(x) I=imread(x); I1=I*0; b=size(I); for m=1:(b(1)-1) for n=1:(b(2)-1) c=abs(I(m,n)-I(m+1,n)); d=abs(I(m,n)-I(m,n+1)); if (c>d) I2(m,n)=c; I2(m,n)=d; else end end %I1 为梯度图的灰度矩阵 %abs(I(m,n)-I(m+1,n))与 abs(I(m,n)-I(m,n+1)) %的作为灰度值赋给 I2(m,n) %图像各项素灰度值取反 %将梯度图以 tidu.bmp 保存 end I2=255-I2; imwrite(I2,'tidu.bmp'); imshow(x);title('原图') ; %显示原图 figure; imshow('tidu.bmp');title('梯度图'); figure zhifangtu('tidu.bmp');title('梯度图直方图'); figure I2=(I2-235)*255; imwrite(I2,'erzhi.bmp'); imshow('erzhi.bmp');title('二值化后图'); %显示梯度图 %显示梯度图的直方图,便 于%分析阀值的大小 %取阀值为 235 %将二值化图以 erzhi.bmp 保存 %显示二值化图 运行:在命令窗口中输入 tidu(‘Lenna.bmp’),输出如下四幅图: 第 5 页 共 15 页
数字图像处理第二次作业 第 6 页 共 15 页
数字图像处理第二次作业 由梯度图直方图可知:阀值应在 200 到 240 之间取,通过不断摸索发 现阀值为 235 时效果较好。如下图: 第 7 页 共 15 页
数字图像处理第二次作业 阀值为 245 的二值化图: 阀值为 225 的二值化图 结论:灰度图像的梯度图就是图像的边缘图像,通过二值化可使边缘更清晰, 且阀值越大图像的噪声斑点越多,阀值越小斑点变少但边缘条纹变得模糊,因此 只有选择合适的阀值才能很好的显示边缘图像。 3.设计一个程序对图像实现缩放(0.75,3 倍)及旋转(绕图象中心)处 理.(用最邻近和双线性两种插值方法实现). 分析:1)缩放:实现缩放可以用如下空间对应关系:u=x/c,v=y/d。这样可以 使图像在 x 轴方向上扩大 c 倍,y 轴方向上放大 d 倍。 2 ) 旋 转 : 实 现 绕 (m1,n1) 旋 转 的 空 间 对 应 关 系 表 示 如 下 所 示 : x0=(i-m1)*cos(jiao)-(j-n1)*sin(jiao)+m1; y0=(i-m1)*sin(jiao)+(j-n1)*cos(jiao)+n1; 其中jiao为顺时针旋转的角度。 3)最邻近法:由于像素空间表示都是整数,而变换后可能映射到非整 第 8 页 共 15 页
分享到:
收藏