图像分割——重点(基于SVM的图像分割)

图像分割——重点(基于SVM的图像分割)
**
图像分割
**
所谓图像分割是指根据灰度、彩⾊、空间纹理、⼏何形状等特征把图像划分成若⼲个互不相交的区域,使得这些特征在同⼀区域内表现出⼀致性或相似性,⽽在不同区域间表现出明显的不同。简单的说就是在⼀副图像中,把⽬标从背景中分离出来。
⼀般来说,⽤于图像分割的算法主要有五类:
第⼀种是阈值分割⽅法( threshold segmentation method)。阈值分割是基于区域的分割算法中最常⽤的分割技术之⼀,其实质是根据⼀定的标准⾃动确定最佳阈值,并根据灰度级使⽤这些像素来实现聚类。
优缺点:计算简单,效率较⾼;只考虑像素点灰度值本⾝的特征,⼀般不考虑空间特征,因此对噪声⽐较敏感,鲁棒性不⾼。
其次是区域增长细分( regional growth segmentation)。区域增长算法的基本思想是将具有相似属性的像素组合以形成区域,即,⾸先划分每个区域以到种⼦像素作为⽣长点,然后将周围邻域与相似属性合并其区域中的像素。
**优缺点:**对复杂图像分割效果好;但是算法复杂,计算量⼤;分裂有可能破坏区域的边界。
第三种是边缘检测分割⽅法( edge detection segmentation method)。边缘检测分割算法是指利⽤不同区域的像素灰度或边缘的颜⾊不连续检测区域,以实现图像分割。边缘检测技术通常可以按照处理的技术分为串⾏边缘检测和并⾏边缘检测。串⾏边缘检测是要想确定当前像素点是否属于检测边缘上的⼀点,取决于先前像素的验证结果。并⾏边缘检测是⼀个像素点是否属于检测边缘⾼尚的⼀点取决于当前正在检测的像素点以及与该像素点的⼀些临近像素点。
**优缺点:**边缘定位准确;速度快;但是不能保证边缘的连续性和封闭性;在⾼细节区域存在⼤量的碎边缘,难以形成⼀个⼤区域,但是⼜不宜将⾼细节区域分成⼩碎⽚;
第四种是基于聚类的分割( segmentation based on clustering)。基于聚类的算法是基于事物之间的相似性作为类划分的标准,即根据样本集的内部结构将其划分为若⼲⼦类,以使相同类型的类尽可能相似、不同的类型的类尽可能不相似。同⼀聚类中的点使⽤相同颜⾊标记,不同聚类颜⾊不同。
**优缺点:**传统 FCM 算法没有考虑空间信息,对噪声和灰度不均匀敏感。
最后是基于CNN中弱监督学习的分割。它指的是为图像中的每个像素分配语义标签的问题,⼜称语义分割。它由三部分组成。 1)给出包含哪些对象的图像。 2)给出⼀个对象的边框。 3)图像中的对象区域⽤部分像素标记。
**优缺点:**解决图像中的噪声和不均匀问题。可以⽤于抑制噪声、特性提取、边缘检测、图像分割等图像处理问题,处理灰度图像;选择何种⽹络结构是这种⽅法要解决的主要问题。需要⼤量数据,速度⾮常慢,结构复杂,分割精度与数据量有关。
竹子为什么长的那么快基于SVM的图像分割:
使⽤⽀持向量机(SVM)实现⾃然图像⾃动分类的⽅法,利⽤区域分割⽅法将图像区分为前景和背景图像,进⽽提取前景图像的特征向量作为SVM训练样本,实现语义分类器。利⽤matlab中libsvm⼯具箱中,可以让⽤户利⽤ginput来提取背景的样本点和前景(待分割出来的⽬标)的样本点作为训练样本,⽽不需实现指定背景和前景的样本点,也不⽤额外的⼩软件来查看某点的RGB值,ginput即可。
原图:
选择、提取像素点:日常生活审美化
提取后:
代码:
%%
tic;
close all;
% clear;
clc;
format compact;
%%
pic = imread('cat.jpg'); %导⼊图⽚
横机罗纹figure;
imshow(pic);
%% 确定训练集
TrainData_background = zeros(20,3,'double');
TrainData_foreground = zeros(20,3,'double');
% 背景采样
msgbox('请选择20个背景样本点','Background Samples','help');
pause;
for run = 1:20
[x,y]= ginput(1); %ginput函数直接提取像素点
hold on;
plot(x,y,'r*');
x = uint8(x);
y = uint8(y);
TrainData_background(run,1)= pic(x,y,1);
TrainData_background(run,2)= pic(x,y,2);
TrainData_background(run,3)= pic(x,y,3);
TrainData_background(run,3)= pic(x,y,3);
赵铭胸围end
俄军% 待分割出来的前景采样
杭州市城市总体规划
msgbox('请选择20个前景样本点','Foreground Samples','help'); pause;
for run = 1:20
[x,y]= ginput(1);
hold on;
plot(x,y,'ro');
x = uint8(x);
y = uint8(y);
TrainData_foreground(run,1)= pic(x,y,1);
TrainData_foreground(run,2)= pic(x,y,2);
TrainData_foreground(run,3)= pic(x,y,3);
end
% let background be 0 & foreground 1
TrainLabel =[zeros(length(TrainData_background),1);...
ones(length(TrainData_foreground),1)];
%% 建⽴⽀持向量机基于libsvm
TrainData =[TrainData_background;TrainData_foreground];
model = svmtrain(TrainLabel, TrainData, '-t 1 -d 1');
%% 进⾏预测 i.e.进⾏图像分割基于libsvm
preTrainLabel = svmpredict(TrainLabel, TrainData, model);
[m,n,k]= size(pic);
TestData = double(reshape(pic,m*n,k));
TestLabal = svmpredict(zeros(length(TestData),1), TestData, model); %%
ind = reshape([TestLabal,TestLabal,TestLabal],m,n,k);
ind = logical(ind);
pic_seg = pic;
pic_seg(~ind)= 0;
figure;
imshow(pic_seg);
figure;
subplot(1,2,1);
imshow(pic);
subplot(1,2,2);
imshow(pic_seg);
%%
toc;

本文发布于:2024-09-21 22:19:28,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/307755.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:区域   图像   分割   边缘   检测   像素   算法   像素点
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议