图像处理的matlab程序Word文档下载推荐.docx
- 文档编号:17510969
- 上传时间:2022-12-06
- 格式:DOCX
- 页数:27
- 大小:28.83KB
图像处理的matlab程序Word文档下载推荐.docx
《图像处理的matlab程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图像处理的matlab程序Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
)
%统计各灰度值像素个数,存储在p中,计算概率,存储在pi中
p=zeros(1,256);
pr=zeros(1,256);
sumpr=zeros(1,256);
%累积概率密度
fork=1:
256;
p(k)=length(find(map==k));
pr(k)=p(k)/pixsum;
sumpr
(1)=pr
(1);
255
sumpr(i+1)=sumpr(i)+pr(i);
%统计完成,概率计算完成,累积概率密度计算完成。
%绘制灰度直方图
figure
(2)
bar(0:
255,pr,'
g'
axis([02550max(pr)])
xlabel('
灰度r'
ylabel('
概率pi'
灰度直方图'
%灰度直方图绘制完成
%直方图拉伸。
(g-0)/(f-min)=(255-0)/(max-min)
A=max(max(map));
B=min(min(map));
%fig(i,j)=255/(A-B)*(map(i,j)-B);
fig(i,j)=255*sumpr(map(i,j)+1);
%直方图均衡化
fig=uint8(fig);
pfig(k)=length(find(fig==k));
pfigi(k)=pfig(k)/pixsum;
figure(3)
imshow(fig)
直方图拉伸后灰度图像'
figure(4)
255,pfigi,'
axis([02550max(pfigi)])
直方图拉伸化后灰度直方图'
%计算拉伸前后方差
mean_map=sum(sum(map))/(row*col);
mean_fig=sum(sum(fig))/(row*col);
var_map=sum(sum((map-mean_map).^2))/(row*col);
var_fig=sum(sum((fig-mean_fig).^2))/(row*col);
fprintf('
拉伸前方差为:
%d'
var_map)
\n拉伸后方差为:
%d\n'
var_fig)
Sobel算子matlab实现:
BMW.jpg'
[m,n,l]=size(map1);
I=zeros(m,n);
%I=uint8(I);
m
n
I(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);
imshow(I,[])
B=zeros(m,n);
A=I;
fori=2:
m-1
forj=2:
n-1
sx=-1*A(i-1,j-1)-2*A(i,j-1)-1*A(i+1,j-1)...
+1*A(i-1,j+1)+2*A(i,j+1)+1*A(i+1,j+1);
sy=-1*A(i-1,j-1)-2*A(i-1,j)-1*A(i-1,j+1)...
+1*A(i+1,j-1)+2*A(i+1,j)+1*A(i+1,j+1);
B(i,j)=max(sx,sy)/4;
figure
(2)
imshow(B,[])
title('
Sobel算法处理后'
Scharr算子matlab实现:
sx=-3*A(i-1,j-1)-10*A(i,j-1)-3*A(i+1,j-1)...
+3*A(i-1,j+1)+10*A(i,j+1)+3*A(i+1,j+1);
sy=-3*A(i-1,j-1)-10*A(i-1,j)-3*A(i-1,j+1)...
+3*A(i+1,j-1)+10*A(i+1,j)+3*A(i+1,j+1);
B(i,j)=max(sx,sy)/15;
Scharr算法处理后'
Robert算子matlab实现:
fori=1:
m-1;
n-1;
B(i,j)=max(abs(A(i+1,j+1)-A(i,j)),abs(A(i+1,j)-A(i,j+1)));
figure(4)
Robert算法处理后'
骨架提取和交叉点检测的matlab实现,用的是中轴法,细化法检测出来的是边缘,程序附后:
map(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);
imshow(map,[])
Y=zeros(row,col);
%存储输出图像
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5根据通道二值化
ifmap1(i,j,2)>
map1(i,j,1)&
&
map1(i,j,2)>
map1(i,j,3)
Y(i,j)=1;
else
Y(i,j)=0;
imshow(Y,[])
二值化后图像'
%以下为骨架提取程序
temp=ones(row,col);
N=0;
%统计邻域内非零像素个数。
T=0;
%统计0-1变换次数
80%大循环次数
fori=2:
row-1
forj=2:
col-1
a=[Y(i,j),Y(i,j-1),Y(i+1,j-1),Y(i+1,j),Y(i+1,j+1),Y(i,j+1),Y(i-1,j+1),Y(i-1,j),Y(i-1,j-1)];
%邻域元素排序。
中间为1,左边为2,逆时针分别为2---9
ifa
(1)==1
form=1:
8
ifa(m)==1
N=N+1;
forn=1:
7
ifa(n)==0&
a(n+1)==1
T=T+1;
ifa(8)==0&
a
(1)==1
if(N>
=2)&
(N<
=6)&
(T==1)&
(a
(2)*a(4)*a(6)==0)&
(a(4)*a(6)*a(8)==0)
temp(i,j)=0;
%标记要删除的点,标志为1
N=0;
T=0;
%删除点
iftemp(i,j)==0
%第一步完成
form=2:
9
ifa(8)==0
(a
(2)*a(4)*a(8)==0)&
(a
(2)*a(6)*a(8)==0)
temp(i,j)==0;
end
%第二步完成
%完成,输出
提取的骨架'
%以下为交叉点检测及标志,交叉点标注在灰度图中
temp1=zeros(row,col);
fori=2:
c=sum(sum(Y(i-1:
i+1,j-1:
j+1)));
ifc>
=4
temp1(i,j)=1;
iftemp1(i,j)==1
map(i,j)=255;
%标注完成,显示灰度图
标注的交叉点'
细化法(这个程序没有实现骨架提取,但仍提出供大家参考):
%骨架提取,以前的思路是进行若干次腐蚀,直到腐蚀为空集的前一次,但效果不好。
%现在改成细化法。
skel=zeros(row,col);
%细化索引表
tab=[0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,...
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,...
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,...
1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,...
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...
1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,...
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,...
1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,...
1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0];
B=[124;
8016;
3264128];
N=sum(sum(Y(i-1:
j+1).*B));
skel(i,j)=tab(N+1);
%腐蚀完成
imshow(skel,[])
提取的图像骨架'
LOG算法的matlab实现:
log=[-2-4-4-4-2;
...
-4080-4;
-48248-4;
-2-4-4-4-2];
A=I;
fori=3:
m-2
forj=3:
n-2
S=sum(sum(A(i-2:
i+2,j-2:
j+2).*log));
B(i,j)=S/56;
LOG算法处理后'
Kirsch算法的matlab实现:
[m,n,dep]=size(map1);
tic
s=zeros(8,1);
t=zeros(8,1);
temp=sum(sum(A([i-1:
i+1],[j-1:
j+1])))-A(i,j);
s
(1)=A(i-1,j-1)+A(i-1,j)+A(i-1,j+1);
s
(2)=A(i-1,j)+A(i-1,j+1)+A(i,j+1);
s(3)=A(i-1,j+1)+A(i,j+1)+A(i+1,j+1);
s(4)=A(i,j+1)+A(i+1,j+1)+A(i+1,j);
s(5)=A(i+1,j+1)+A(i+1,j)+A(i+1,j-1);
s(6)=A(i+1,j)+A(i+1,j-1)+A(i,j-1);
s(7)=A(i+1,j-1)+A(i,j-1)+A(i-1,j-1);
s(8)=A(i,j-1)+A(i-1,j-1)+A(i-1,j);
fork=1:
t(k)=temp-s(k);
B(i,j)=max(max(abs(5*s-3*t)))/15;
Kirsch算法处理后'
toc%统计一下程序运行时间,可以见证这个算法速度较慢
均值、高斯和中值去噪的matlab实现:
%实现去噪处理的三个小算法,并显示噪声图。
%@@@@@@@@@@@@@@@@@@@@@均值滤波,存储在fig1中
fig1=zeros(row,col);
fig1(i,j)=1/9*sum(sum(map(i-1:
%fig1(i,j)=1/9*(map(i-1,j-1)+map(i-1,j)+map(i-1,j+1)+map(i,j-1)+...
%map(i,j)+map(i,j+1)+map(i+1,j-1)+map(i,j+1)+map(i+1,j+1));
%滤波完成,边缘处理,直接将原图边缘加入
fig1(1,:
)=map(1,:
fig1(row,:
)=map(row,:
fig1(:
1)=map(:
1);
col)=map(:
col);
fig1=uint8(fig1);
%边缘处理完成
subplot(2,1,1)
imshow(fig1)
均值去噪'
fig11=map-fig1;
subplot(2,1,2)
imshow(fig11)
噪声图像'
%@@@@@@@@@@@@@@@@@@@@@加权滤波,存储在fig2中
fig2=uint8(zeros(row,col));
model=uint8([121;
242;
121]);
fig2(i,j)=sum(sum(map(i-1:
j+1).*model))/16;
%fig2(i,j)=1/16*(map(i-1,j-1)+2*map(i-1,j)+map(i-1,j+1)+2*map(i,j-1)+...
%4*map(i,j)+2*map(i,j+1)+map(i+1,j-1)+2*map(i,j+1)+map(i+1,j+1));
fig2(1,:
fig2(row,:
fig2(:
imshow(fig2)
加权去噪'
fig21=map-fig2;
imshow(fig21)
%@@@@@@@@@@@@@@@@@@@@@中值滤波,存储在fig3中
fig3=uint8(zeros(row,col));
sortmap=uint8(zeros(1,9));
sortmap=sort([map(i-1,j-1:
j+1),map(i,j-1:
j+1),map(i+1,j-1:
j+1)]);
fig3(i,j)=sortmap(5);
fig3(1,:
fig3(row,:
fig3(:
imshow(fig3)
中值去噪'
fig31=map-fig3;
imshow(fig31)
腐蚀和膨胀的matlab实现:
[row,col,dep]=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 处理 matlab 程序