MATLAB图像处理——边缘检测及图像分割算法
1.检测图像中的线段
clear
clc
I=imread('1.jpg');%读入图像
I=rgb2gray(I); %转换为灰度图像
h1=[-1, -1. -1; 2, 2, 2; -1, -1, -1]; %模板
h2=[-1, -1, 2; -1, 2, -1; 2, -1, -1];
h3=[-1, 2, -1; -1, 2, -1; -1, 2, -1];
h4=[2, -1, -1; -1, 2, -1; -1, -1, 2];
J1=imfilter(I, h1); %线段检测
J2=imfilter(I, h2);
J3=imfilter(I, h3);
J4=imfilter(I, h4);
J=J1+J2+J3+J4; %4条线段叠加
figure;
subplot(121); imshow(I);%显示灰度图像
subplot(122); imshow(J);%显示检测到的线段
2.全局阈值图像分割
clear
clc
I=imread('1.jpg');%读入图像
I=rgb2gray(I); %转换为灰度图像
J=I>50; %图像分割,阈值为12
[width, height]=size(I); %图像的行和列
for i=1:widthfor j=1:heightif (I(i, j)>50) %图像分割,阈值为130K(i, j)=1;else K(i, j)=0;endend
end
figure;
subplot(121); imshow(J); %显示结果
subplot(122); imshow(K);
3.Otsu图像分割算法
clear
clc
I=imread('1.jpg');%读入图像
I=rgb2gray(I); %转换为灰度图像
I=im2double(I);
T=graythresh(I); %获取阈值
J=im2bw(I, T); %图像分割
figure;
subplot(121); imshow(I);%显示原图像
subplot(122); imshow(J);%显示结果
4.迭代式阈值图像分割算法
clear
clc
I=imread('1.jpg');%读入图像
I=rgb2gray(I); %转换为灰度图像
I=im2double(I);
T0=0.01; %参数T0
T1=(min(I(:))+max(I(:)))/2;
r1=find(I>T1);
r2=find(I<=T1);
T2=(mean(I(r1))+mean(I(r2)))/2;
while abs(T2-T1)<T0 %迭代求阈值T1=T2;r1=find(I>T1);r2=find(I<=T1);T2=(mean(I(r1))+mean(I(r2)))/2;
end
J=im2bw(I, T2); %图像分割
figure;
subplot(121); imshow(I);%显示原图像
subplot(122); imshow(J);%显示结果
最后:
如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!