Matlab图像处理常用算法源码

2023-05-31 0 601

Matlab图像处理常用算法源码

matlab影像处理常见演算法源代码

1.影像探底回升

I=imread(xian.bmp);

J=double(I);

J=-J+(256-1);                 %影像探底回升内积

H=uint8(J);

subplot(1,2,1),imshow(I);

subplot(1,2,2),imshow(H);

2.位图内积

I=imread(xian.bmp);

subplot(2,2,1),imshow(I);

title(原初影像);

axis([50,250,50,200]);

axis on;                  %表明极坐标

I1=rgb2gray(I);

subplot(2,2,2),imshow(I1);

title(位图影像);

axis([50,250,50,200]);

axis on;                  %表明极坐标

J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的位图拉伸为[0 1]

subplot(2,2,3),imshow(J);

title(内积影像[0.1 0.5]);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的位图拉伸为[0 1]

subplot(2,2,4),imshow(K);

title(内积影像[0.3 0.7]);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

3.非内积

I=imread(xian.bmp);

I1=rgb2gray(I);

subplot(1,2,1),imshow(I1);

title(位图影像);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

J=double(I1);

J=40*(log(J+1));

H=uint8(J);

subplot(1,2,2),imshow(H);

title(对数变换影像);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

4.直方图均衡化

I=imread(xian.bmp);

I=rgb2gray(I);

figure;

subplot(2,2,1);

imshow(I);

subplot(2,2,2);

imhist(I);

I1=histeq(I);

figure;

subplot(2,2,1);

imshow(I1);

subplot(2,2,2);

imhist(I1);

5.线平滑滤波器

I=imread(xian.bmp);

subplot(231)

imshow(I)

title(原初影像)

I=rgb2gray(I);

I1=imnoise(I,salt & pepper,0.02);

subplot(232)

imshow(I1)

title(添加椒盐噪声的影像)

k1=filter2(fspecial(average,3),I1)/255;          %进行3*3模板平滑滤波

k2=filter2(fspecial(average,5),I1)/255;          %进行5*5模板平滑滤波k3=filter2(fspecial(average,7),I1)/255;          %进行7*7模板平滑滤波

k4=filter2(fspecial(average,9),I1)/255;          %进行9*9模板平滑滤波

subplot(233),imshow(k1);title(3*3模板平滑滤波);

subplot(234),imshow(k2);title(5*5模板平滑滤波);

subplot(235),imshow(k3);title(7*7模板平滑滤波);

subplot(236),imshow(k4);title(9*9模板平滑滤波);

6.中值滤波器

I=imread(xian.bmp);

I=rgb2gray(I);

J=imnoise(I,salt&pepper,0.02);

subplot(231),imshow(I);title(原影像);

subplot(232),imshow(J);title(添加椒盐噪声影像);

k1=medfilt2(J);            %进行3*3模板中值滤波

k2=medfilt2(J,[5,5]);      %进行5*5模板中值滤波

k3=medfilt2(J,[7,7]);      %进行7*7模板中值滤波

k4=medfilt2(J,[9,9]);      %进行9*9模板中值滤波

subplot(233),imshow(k1);title(3*3模板中值滤波);

subplot(234),imshow(k2);title(5*5模板中值滤波);

subplot(235),imshow(k3);title(7*7模板中值滤波);

subplot(236),imshow(k4);title(9*9模板中值滤波);

7.用Sobel算子和拉普拉斯对影像锐化

I=imread(xian.bmp);

subplot(2,2,1),imshow(I);

title(原初影像);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

I1=im2bw(I);

subplot(2,2,2),imshow(I1);

title(二值影像);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

H=fspecial(sobel);     %选择sobel算子

J=filter2(H,I1);            %卷积运算

subplot(2,2,3),imshow(J); 

title(sobel算子锐化影像);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

h=[0 1 0,1 -4 1,0 1 0];   %拉普拉斯算子

J1=conv2(I1,h,same);            %卷积运算

subplot(2,2,4),imshow(J1); 

title(拉普拉斯算子锐化影像);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

8.梯度算子检测边缘

I=imread(xian.bmp);

subplot(2,3,1);

imshow(I);

title(原初影像);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

I1=im2bw(I);

subplot(2,3,2);

imshow(I1);

title(二值影像);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

I2=edge(I1,roberts);

figure;

subplot(2,3,3);

imshow(I2);

title(roberts算子分割结果);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

I3=edge(I1,sobel);

subplot(2,3,4);

imshow(I3);

title(sobel算子分割结果);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

I4=edge(I1,Prewitt);

subplot(2,3,5);

imshow(I4);

title(Prewitt算子分割结果);

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

9.LOG算子检测边缘

I=imread(xian.bmp);

subplot(2,2,1);

imshow(I);

title(原初影像);

I1=rgb2gray(I);

subplot(2,2,2);

imshow(I1);

title(位图影像);

I2=edge(I1,log);

subplot(2,2,3);

imshow(I2);

title(log算子分割结果);

10.Canny算子检测边缘

I=imread(xian.bmp);

subplot(2,2,1);

imshow(I);

title(原初影像)

I1=rgb2gray(I);

subplot(2,2,2);

imshow(I1);

title(位图影像);

I2=edge(I1,canny);

subplot(2,2,3);

imshow(I2);

title(canny算子分割结果);

11.边界跟踪(bwtraceboundary函数)

clc

clear all

I=imread(xian.bmp);

figure

imshow(I);

title(原初影像);

I1=rgb2gray(I);                %将彩色影像转化位图影像

threshold=graythresh(I1);        %计算将位图影像转化为二值影像所需的门限

BW=im2bw(I1, threshold);       %将位图图像转化为二值影像

figure

imshow(BW);

title(二值影像);

dim=size(BW);

col=round(dim(2)/2)-90;         %计算起始点列坐标

row=find(BW(:,col),1);          %计算起始点行坐标

connectivity=8;

num_points=180;

contour=bwtraceboundary(BW,[row,col],N,connectivity,num_points);

%提取边界

figure

imshow(I1);

hold on;

plot(contour(:,2),contour(:,1), g,LineWidth ,2);

title(边界跟踪影像);

12.Hough变换

I= imread(xian.bmp);

rotI=rgb2gray(I);

subplot(2,2,1);

imshow(rotI);

title(灰度影像);

axis([50,250,50,200]);

grid on;                 

axis on; 

BW=edge(rotI,prewitt);

subplot(2,2,2);

imshow(BW);

title(prewitt算子边缘检测后影像);

axis([50,250,50,200]);

grid on;                 

axis on; 

[H,T,R]=hough(BW);

subplot(2,2,3);

imshow(H,[],XData,T,YData,R,InitialMagnification,fit);

title(霍夫变换图);

xlabel(\theta),ylabel(\rho);

axis on , axis normal, hold on;

P=houghpeaks(H,5,threshold,ceil(0.3*max(H(:))));

x=T(P(:,2));y=R(P(:,1));

plot(x,y,s,color,white);

lines=houghlines(BW,T,R,P,FillGap,5,MinLength,7);

subplot(2,2,4);,imshow(rotI);

title(霍夫变换影像检测);

axis([50,250,50,200]);

grid on;                 

axis on; 

hold on;

max_len=0;

for k=1:length(lines)

xy=[lines(k).point1;lines(k).point2];

plot(xy(:,1),xy(:,2),LineWidth,2,Color,green);

plot(xy(1,1),xy(1,2),x,LineWidth,2,Color,yellow);

plot(xy(2,1),xy(2,2),x,LineWidth,2,Color,red);

len=norm(lines(k).point1-lines(k).point2);

if(len>max_len)

max_len=len;

xy_long=xy;

end

end

plot(xy_long(:,1),xy_long(:,2),LineWidth,2,Color,cyan);

13.直方图阈值法

I=imread(xian.bmp);

I1=rgb2gray(I);

figure;

subplot(2,2,1);

imshow(I1);

title(位图影像)

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

[m,n]=size(I1);                            %测量影像尺寸参数

GP=zeros(1,256);                           %预创建存放位图出现概率的向量

for k=0:255

GP(k+1)=length(find(I1==k))/(m*n);    %计算每级位图出现的概率,将其存入GP中相应位置

end

subplot(2,2,2),bar(0:255,GP,g)                   %绘制直方图

title(位图直方图)

xlabel(位图值)

ylabel(出现概率) 

I2=im2bw(I,150/255);   

subplot(2,2,3),imshow(I2);

title(阈值150的分割影像)

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

I3=im2bw(I,200/255);   %

subplot(2,2,4),imshow(I3);

title(阈值200的分割影像)

axis([50,250,50,200]);

grid on;                  %表明网格线

axis on;                  %表明极坐标

马上就快开学了。下学期的高教社杯也即将开赛,如果想参加的你还没有着手准备,现在准备也不晚,查看下方海报,了解更多。

Matlab图像处理常用算法源码

免费领取!

Matlab图像处理常用算法源码

付费领取!

Matlab图像处理常用算法源码

另外数模乐园开始招募讲师和助教啦!

感兴趣的模友可以投简历试试,详情点击下方图片跳转!

Matlab图像处理常用算法源码

有任何疑问,可以联系“数乐君”,“数乐君”将为你解答!

Matlab图像处理常用算法源码

扫码添加数乐君

| 数模乐园

数乐君 dream_7345

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务