图像处理的matlab程序.docx

上传人:b****5 文档编号:4576030 上传时间:2022-12-06 格式:DOCX 页数:27 大小:28.83KB
下载 相关 举报
图像处理的matlab程序.docx_第1页
第1页 / 共27页
图像处理的matlab程序.docx_第2页
第2页 / 共27页
图像处理的matlab程序.docx_第3页
第3页 / 共27页
图像处理的matlab程序.docx_第4页
第4页 / 共27页
图像处理的matlab程序.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

图像处理的matlab程序.docx

《图像处理的matlab程序.docx》由会员分享,可在线阅读,更多相关《图像处理的matlab程序.docx(27页珍藏版)》请在冰豆网上搜索。

图像处理的matlab程序.docx

图像处理的matlab程序

贡献几个图像处理的matlab程序,每一个都是单独的程序。

前言:

学习了图像处理这门课程,掌握了一些基本的图像处理方法及编程实现方法。

提供给大家参考,欢迎加QQ探讨问题。

以下程序均为笔者根据处理的原理原创作品,经运行检测可行。

若效果不能令方家满意,恳请赐教:

cfvsfc@

直方图拉伸matlab实现:

map1=imread('p.jpg');

[row,col,dep]=size(map1);%行,列,深度值

map=zeros(row,col);

map=uint8(map);

pixsum=row*col;%像素总数

%灰度化

fori=1:

row

forj=1:

col

gray=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);

map(i,j)=gray;

end

end

%灰度化完成,输出灰度图

figure

(1)

imshow(map)

title('原始灰度图像')

%统计各灰度值像素个数,存储在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;

end

sumpr

(1)=pr

(1);

fori=1:

255

sumpr(i+1)=sumpr(i)+pr(i);

end

%统计完成,概率计算完成,累积概率密度计算完成。

%绘制灰度直方图

figure

(2)

bar(0:

255,pr,'g')

axis([02550max(pr)])

xlabel('灰度r')

ylabel('概率pi')

title('灰度直方图')

%灰度直方图绘制完成

%直方图拉伸。

(g-0)/(f-min)=(255-0)/(max-min)

A=max(max(map));

B=min(min(map));

fori=1:

row

forj=1:

col

%fig(i,j)=255/(A-B)*(map(i,j)-B);

fig(i,j)=255*sumpr(map(i,j)+1);%直方图均衡化

end

end

fig=uint8(fig);

fork=1:

256;

pfig(k)=length(find(fig==k));

pfigi(k)=pfig(k)/pixsum;

end

figure(3)

imshow(fig)

title('直方图拉伸后灰度图像')

figure(4)

bar(0:

255,pfigi,'g')

axis([02550max(pfigi)])

xlabel('灰度r')

ylabel('概率pi')

title('直方图拉伸化后灰度直方图')

%计算拉伸前后方差

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)

fprintf('\n拉伸后方差为:

%d\n',var_fig)

Sobel算子matlab实现:

map1=imread('BMW.jpg');

[m,n,l]=size(map1);%行,列,深度值

I=zeros(m,n);

%I=uint8(I);

%灰度化

fori=1:

m

forj=1:

n

I(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);

end

end

%灰度化完成,输出灰度图

figure

(1)

imshow(I,[])

title('原始灰度图像')

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;

end

end

figure

(2)

imshow(B,[])

title('Sobel算法处理后')

Scharr算子matlab实现:

map1=imread('BMW.jpg');

[m,n,l]=size(map1);%行,列,深度值

I=zeros(m,n);

%I=uint8(I);

%灰度化

fori=1:

m

forj=1:

n

I(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);

end

end

%灰度化完成,输出灰度图

figure

(1)

imshow(I,[])

title('原始灰度图像')

B=zeros(m,n);

A=I;

fori=2:

m-1

forj=2:

n-1

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;

end

end

figure

(2)

imshow(B,[])

title('Scharr算法处理后')

Robert算子matlab实现:

map1=imread('BMW.jpg');

[m,n,l]=size(map1);%行,列,深度值

I=zeros(m,n);

%I=uint8(I);

%灰度化

fori=1:

m

forj=1:

n

I(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);

end

end

%灰度化完成,输出灰度图

figure

(1)

imshow(I,[])

title('原始灰度图像')

B=zeros(m,n);

A=I;

fori=1:

m-1;

forj=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)));

end

end

figure(4)

imshow(B,[])

title('Robert算法处理后')

骨架提取和交叉点检测的matlab实现,用的是中轴法,细化法检测出来的是边缘,程序附后:

map1=imread('p.jpg');

[row,col,dep]=size(map1);%行,列,深度值

map=zeros(row,col);

pixsum=row*col;%像素总数

%灰度化

fori=1:

row

forj=1:

col

map(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);

end

end

%灰度化完成,输出灰度图

figure

(1)

imshow(map,[])

title('原始灰度图像')

Y=zeros(row,col);%存储输出图像

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5根据通道二值化

fori=1:

row

forj=1:

col

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;

end

end

end

figure

(2)

imshow(Y,[])

title('二值化后图像')

%以下为骨架提取程序

temp=ones(row,col);

N=0;%统计邻域内非零像素个数。

T=0;%统计0-1变换次数

fork=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;

end

end

forn=1:

7

ifa(n)==0&&a(n+1)==1

T=T+1;

end

end

ifa(8)==0&&a

(1)==1

T=T+1;

end

end

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

end

N=0;

T=0;

end

end

%删除点

fori=1:

row

forj=1:

col

iftemp(i,j)==0

Y(i,j)=0;

end

end

end

%第一步完成

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=2:

9

ifa(m)==1

N=N+1;

end

end

forn=1:

7

ifa(n)==0&&a(n+1)==1

T=T+1;

end

end

ifa(8)==0

T=T+1;

end

end

if(N>=2)&&(N<=6)&&(T==1)&&(a

(2)*a(4)*a(8)==0)&&(a

(2)*a(6)*a(8)==0)

temp(i,j)==0;%标记要删除的点,标志为1

end

N=0;

T=0;

end

end

%删除点

fori=1:

row

forj=1:

col

iftemp(i,j)==0

Y(i,j)=0;

end

end

end

%第二步完成

end

%完成,输出

figure(3)

imshow(Y,[])

title('提取的骨架')

%以下为交叉点检测及标志,交叉点标注在灰度图中

temp1=zeros(row,col);

fori=2:

row-1

forj=2:

col-1

c=sum(sum(Y(i-1:

i+1,j-1:

j+1)));

ifc>=4

temp1(i,j)=1;

end

end

end

fori=1:

row

forj=1:

col

iftemp1(i,j)==1

map(i,j)=255;

end

end

end

%标注完成,显示灰度图

figure(4)

imshow(map,[])

title('标注的交叉点')

细化法(这个程序没有实现骨架提取,但仍提出供大家参考):

map1=imread('p.jpg');

[row,col,dep]=size(map1);%行,列,深度值

map=zeros(row,col);

pixsum=row*col;%像素总数

%灰度化

fori=1:

row

forj=1:

col

map(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);

end

end

%灰度化完成,输出灰度图

figure

(1)

imshow(map,[])

title('原始灰度图像')

Y=zeros(row,col);%存储输出图像

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5根据通道二值化

fori=1:

row

forj=1:

col

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;

end

end

end

figure

(2)

imshow(Y,[])

title('二值化后图像')

%骨架提取,以前的思路是进行若干次腐蚀,直到腐蚀为空集的前一次,但效果不好。

%现在改成细化法。

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,1,1,0,0,0,0,0,0,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,...

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...

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,1,1,0,0,0,0,0,0,0,0,...

1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,...

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];

fori=2:

row-1

forj=2:

col-1

N=sum(sum(Y(i-1:

i+1,j-1:

j+1).*B));

skel(i,j)=tab(N+1);

end

end

%腐蚀完成

figure(3)

imshow(skel,[])

title('提取的图像骨架')

LOG算法的matlab实现:

map1=imread('BMW.jpg');

[m,n,l]=size(map1);%行,列,深度值

I=zeros(m,n);

%I=uint8(I);

%灰度化

fori=1:

m

forj=1:

n

I(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);

end

end

%灰度化完成,输出灰度图

figure

(1)

imshow(I,[])

title('原始灰度图像')

B=zeros(m,n);

log=[-2-4-4-4-2;...

-4080-4;...

-48248-4;...

-4080-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;

end

end

figure

(2)

imshow(B,[])

title('LOG算法处理后')

Kirsch算法的matlab实现:

map1=imread('BMW.jpg');

[m,n,dep]=size(map1);%行,列,深度值

I=zeros(m,n);

%I=uint8(I);

%灰度化

fori=1:

m

forj=1:

n

I(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);

end

end

%灰度化完成,输出灰度图

figure

(1)

imshow(I,[])

title('原始灰度图像')

tic

B=zeros(m,n);

s=zeros(8,1);

t=zeros(8,1);

A=I;

fori=2:

m-1

forj=2:

n-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:

8

t(k)=temp-s(k);

end

B(i,j)=max(max(abs(5*s-3*t)))/15;

end

end

figure

(2)

imshow(B,[])

title('Kirsch算法处理后')

toc%统计一下程序运行时间,可以见证这个算法速度较慢

均值、高斯和中值去噪的matlab实现:

%实现去噪处理的三个小算法,并显示噪声图。

map1=imread('p.jpg');

[row,col,dep]=size(map1);%行,列,深度值

map=zeros(row,col);

map=uint8(map);

pixsum=row*col;%像素总数

%灰度化

fori=1:

row

forj=1:

col

map(i,j)=0.11*map1(i,j,1)+0.59*map1(i,j,2)+0.3*map1(i,j,3);

end

end

%灰度化完成,输出灰度图

figure

(1)

imshow(map)

title('原始灰度图像')

%@@@@@@@@@@@@@@@@@@@@@均值滤波,存储在fig1中

fig1=zeros(row,col);

fori=2:

row-1

forj=2:

col-1

fig1(i,j)=1/9*sum(sum(map(i-1:

i+1,j-1:

j+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));

end

end

%滤波完成,边缘处理,直接将原图边缘加入

fig1(1,:

)=map(1,:

);

fig1(row,:

)=map(row,:

);

fig1(:

1)=map(:

1);

fig1(:

col)=map(:

col);

fig1=uint8(fig1);

%边缘处理完成

figure

(2)

subplot(2,1,1)

imshow(fig1)

title('均值去噪')

fig11=map-fig1;

subplot(2,1,2)

imshow(fig11)

title('噪声图像')

%@@@@@@@@@@@@@@@@@@@@@加权滤波,存储在fig2中

fig2=uint8(zeros(row,col));

model=uint8([121;242;121]);

fori=2:

row-1

forj=2:

col-1

fig2(i,j)=sum(sum(map(i-1:

i+1,j-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));

end

end

%滤波完成,边缘处理,直接将原图边缘加入

fig2(1,:

)=map(1,:

);

fig2(row,:

)=map(row,:

);

fig2(:

1)=map(:

1);

fig2(:

col)=map(:

col);

figure(3)

subplot(2,1,1)

imshow(fig2)

title('加权去噪')

fig21=map-fig2;

subplot(2,1,2)

imshow(fig21)

title('噪声图像')

%@@@@@@@@@@@@@@@@@@@@@中值滤波,存储在fig3中

fig3=uint8(zeros(row,col));

sortmap=uint8(zeros(1,9));

fori=2:

row-1

forj=2:

col-1

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);

end

end

%滤波完成,边缘处理,直接将原图边缘加入

fig3(1,:

)=map(1,:

);

fig3(row,:

)=map(row,:

);

fig3(:

1)=map(:

1);

fig3(:

col)=map(:

col);

figure(4)

subplot(2,1,1)

imshow(fig3)

title('中值去噪')

fig31=map-fig3;

subplot(2,1,2)

imshow(fig31)

title('噪声图像')

腐蚀和膨胀的matlab实现:

map1=imread('p.jpg');

[row,col,dep]=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1