数字图像处理第二次作业
数字图像第二讲作业
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 页