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; %表明极坐标马上就快开学了。下学期的高教社杯也即将开赛,如果想参加的你还没有着手准备,现在准备也不晚,查看下方海报,了解更多。
免费领取!
付费领取!
另外数模乐园开始招募讲师和助教啦!
感兴趣的模友可以投简历试试,详情点击下方图片跳转!
有任何疑问,可以联系“数乐君”,“数乐君”将为你解答!
扫码添加数乐君
| 数模乐园
数乐君 | dream_7345