【毕业设计系列】019:常用的图像分割算法及其实现(效果很好)

Date: 2017/12/30

1、常用的图像分割算法

(1)基于阈值的分割方法:可在各种颜色空间或不同通道中完成阈值、自适应阈值图像分割。
(2)基于边缘的分割方法:各种边缘检测算子,Sobel,Canny等。
(3)基于区域的分割方法:分水岭、区域归并与分裂。
(4)图割分割:最大流(最小割)算法
(5)基于深度信息的分割:
(6)基于先验信息的分割:

2、实现

(这里仅提供部分代码程序,需要完整代码的同学可以通过QQ(2963033731)联系我进行获取!)

编程语言: Matlab

Matlab代码:

点击查看代码
%% 基于Matlab的图像分割算法研究         
%方法包括:基于阈值的分割、基于分水岭变换的分割和基于区域生长法的分割
Img=imread('horse.jpg');%读取图像
g = rgb2gray(Img);%灰度化
figure,imshow(Img),title('原始图像');
%% 1.基于阈值的图像分割(OTSU)
% se=strel('disk',5);
% ft=imtophat(f,se);%顶帽变换
Thr=graythresh(g);%采用自适应阈值(大津阈值OTSU)
lt=im2bw(g,Thr);
figure,imshow(lt),title('局部阈值分割')

%% 2.基于分水岭变换的图像分割
%Step1. 获取灰度图像
Img_gray = g;
% Step2. 利用Sobel求取梯度图像
hy=fspecial('sobel');%生成sobel垂直梯度模板 
hx=hy';                      %生成sobel水平梯度模板  
   
gradx=imfilter(double(Img_gray),hx,'replicate'); 
figure,imshow(abs(gradx),[]),title('图像的sobel水平梯度');   
grady=imfilter(double(Img_gray),hy,'replicate');   
figure, imshow(abs(grady),[]),title('图像的sobel垂直梯度'); 
grad=sqrt(gradx.^2+grady.^2);  %得到图像的sobel梯度 
figure,imshow(grad,[]),title('图像的sobel梯度图像'); 

L1 = watershed(grad);
Lrgb1 = label2rgb(L1);
figure,imshow(Lrgb1),title('梯度幅值直接做分水岭变换(传统的分水岭变换)')%直接进行变换的效果不好

注意:后面核心代码并未提供。

3、实验结果

image
image
image
image

posted @ 2022-04-11 16:47  SoaringLee_fighting  阅读(327)  评论(0编辑  收藏  举报