图像分割(matlab)

这篇具有很好参考价值的文章主要介绍了图像分割(matlab)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图像分割是将一幅数字图像分割成不同区域,在同一区域内具有在一定的准测下可认为是相同的性质,如灰度、颜色、纹理等,而任何相邻区域之间其性质具有明显的区别,主要包括边缘分割技术、阈值分割技术和区域分割技术

边缘分割技术

利用物体和背景在某种图像特性上的差异来实现的。

图像中的线段

将图像点x(x,y)某个领域中的每个像素值都与模板中对应的系数相乘,然后将结果进行累加,从而得到该点的新像素值。如果邻域的大小为m×n,则总共有mn个系数。这些系数组成矩阵,称为模板或算子。
对于图像中的间断点,常用的检测模板为:图像分割(matlab)

对于图像中的线段,常用的检测模板为:分别对应水平线段、+45°线段、垂直线段和-45°线段
图像分割(matlab)
检测图像中的线段

>> I = imread('E:\persional\matlab\images\house.tif');
>> 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;%线条叠加
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imshow(J);%显示检测到的线段

图像分割(matlab)

微分算子

通过算子对图像进行滤波,可以得到图像的边缘

Roberts算子:对于离散的图像f(x,y),边缘检测算子就是用图像的垂直和水平差分来逼近梯度算子,即为:
▽f = (f(x,y)-f(x-1,y),f(x,y)-f(x,y-1))
在进行边缘检测时,对图像中的每个像素计算▽f,然后求绝对值,最后进行阈值操作就可以实现。
Roberts算子计算公式:
图像分割(matlab)
Roberts算子由下面的两个模板组成:
图像分割(matlab)
采用函数edge()进行图像的边缘检测,该函数的返回值为二值图像,和输入图像大小相同,数据类型为逻辑型

BW = edge(I,‘roberts’)
BW = edge(I,‘roberts’,thresh)
[BW,thresh] = edge(I,‘roberts’,…)

BW:二值图像
thresh:分割阈值

图像边缘检测:

>> I = imread('E:\persional\matlab\images\house.tif');
>> I = im2double(I);
>> [J,thresh] = edge(I,'roberts',15/255);
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imshow(J);

图像分割(matlab)

Prewitt算子:更加复杂的图像大小为3×3的算子
图像分割(matlab)
BW = edge(I,‘Prewitt’)
BW = edge(I,‘Prewitt’,thresh)
BW = edge(I,'Prewitt,thresh,direction)
[BW,thresh] = edge(I,‘Prewitt’,…)

BW:二值图像
thresh:分割阈值,可以为空矩阵[ ],如若不设置,系统自动计算阈值进行分割
direction:可以取值horizontal、vertical和borth,默认为borth

>> I = imread('E:\persional\matlab\images\house.tif');
>> I = im2double(I); 
>> [J,thresh] = edge(I,'Prewitt',[],'both');%采用prewitt算子边缘检测
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imshow(J);

图像分割(matlab)

Sobel算子:

BW = edge(I,‘Sobel’)
BW = edge(I,‘Sobel’,thresh)
BW = edge(I,‘Sobel’,thresh,direction)
[BW,thresh] = edge(I,‘Sobel’,…)

BW:二值图像
thresh:分割阈值,可以为空矩阵[ ],如若不设置,系统自动计算阈值进行分割
direction:可以取值horizontal、vertical和borth,默认为borth

>> I = imread('E:\persional\matlab\images\house.tif');
>> I = im2double(I);
>> [J,thresh] = edge(I,'sobel',[],'horizontal');%采用sobel算子检测边缘
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imshow(J);

图像分割(matlab)

采用函数fspecial()产生预定义模板:

>> format rat;%设置为有理输出
>> hsobel = fspecial('sobel');%获得水平方向的算子,可以通过转置得到垂直方向的算子
>> hprewitt = fspecial('prewit');%获得水平方向的算子,可以通过转置得到垂直方向的算子
>> hlaplacian = fspecial('laplacian');
>> hlog = fspecial('log',3);
>> format short;%设置输出数据的格式
>> hsobel

hsobel =

     1     2     1
     0     0     0
    -1    -2    -1

>> hprewitt

hprewitt =

     1     1     1
     0     0     0
    -1    -1    -1

>> hlaplacian

hlaplacian =

    0.1667    0.6667    0.1667
    0.6667   -3.3333    0.6667
    0.1667    0.6667    0.1667

>> hlog

hlog =

    0.4038    0.8021    0.4038
    0.8021   -4.8233    0.8021
    0.4038    0.8021    0.4038

采用函数fespecail()和imfilter提取图像的边缘:

>> I = imread('E:\persional\matlab\images\house.tif');
>> I = im2double(I);
>> h = fspecial('laplacian');
>> J = imfilter(I,h,'replicate');%图像滤波
>> K = im2bw(J,20/255);%变为二值图
>> figure,
>> subplot(131),imshow(I);
>> subplot(132),imshow(J);%显示灰度
>> subplot(133),imshow(K);%二值图像

图像分割(matlab)

Canny算子

优点:低误码率、高定位精度和抑制虚假边缘等优点

BW = edge(I,‘canny’)
BW = edge(I,‘canny’,thresh)
BW = edge(I,‘canny’,thresh,sigma)
[BW,thresh] = edge(I,‘canny’,…)

BW:二值图像
thresh:分割阈值,可以为空矩阵[ ],如若不设置,系统自动计算阈值进行分割
sigma:对高斯滤波器的标准值sigma进行设置,默认值为1

>> I = imread('E:\persional\matlab\images\house.tif');
>> I = im2double(I);
>> J = imnoise(I,'gaussian',0,0.01);%添加高斯噪声
>> [K,thresh]=edge(J,'canny');%Canny算子检测边缘
>> figure,
>> subplot(121),imshow(J);
>> subplot(122),imshow(K);

图像分割(matlab)

LOG 算子

拉普拉斯算子是一种不依赖边缘方向的二阶微分算子,它是标量而不是矢量,而且具有旋转不变的性质,在图像处理中经常被用来提取图像的边缘,表达式:
图像分割(matlab)
数字图像的近似公式:▽2 f(x,y) = f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1) - 4*f(x,y)
由于Laplacian算子是二阶微分算子,对图像中的噪声非常敏感,首先采用Gaussian函数对图像进行平滑,然后采用Laplacian算子根据二阶导数过零点来检测图像边缘,称为LOG

BW = edge(I,‘log’)
BW = edge(I,‘log’,thresh)
BW = edge(I,‘log’,thresh,sigma)
[BW,thresh] = edge(I,‘log’,…)

BW:二值图像
thresh:分割阈值,可以为空矩阵[ ],如若不设置,系统自动计算阈值进行分割
sigma:对高斯滤波器的标准值sigma进行设置,默认值为2,滤波器大小为n×n,其中n为ceil(sigma×3)×2+1

>> I = imread('E:\persional\matlab\images\house.tif');
>> I = im2double(I);
>> J = imnoise(I,'gaussian',0,0.05);
>> [K,thresh] = edge(J,'log',[],6);
>> figure,
>> subplot(131),imshow(I);
>> subplot(132),imshow(J);
>> subplot(133),imshow(K);

图像分割(matlab)

阈值分割技术

阈值分割技术是最简单的一种图像分割方法,关键在于寻找合适的阈值,通常根据图像的直方图来选取

全局阈值

通过全局的信息,例如整个图像的灰度直方图。如果在整个图像中只使用一个阈值,则这种方法叫做全局阈值法,整个图像分成两个区域,即目标对象(黑色)和背景对象(白色)。全局阈值将整个图像的灰度阈值设置为常熟。
对于物体和背景对比较明显的图像,其灰度直方图为双峰形状,可以选择两峰之间的波谷对应的像素值作为全局阈值,将图像分割为目标对象和背景。公式如下:
图像分割(matlab)
其中f(x,y)为点(x,y)的像素值,g(x,y)为分割后的图像,T为全局阈值,通常通过直方图来获取全局阈值。

采用全局阈值对图像进行分割:

>> I = imread('E:\persional\matlab\images\house.tif');
>> [width,height] = size(I);
>> imhist(I,200);
>> J = I>124;%图像分割,阈值为124
>> for i=1:width
		for j=1:height
			if(I(i,j)>164)%图像分割,阈值为164
				K(i,j)=1;
			else
				K(i,j)=0;
			end
		end
  end
>> figure,
>> subplot(121),imshow(J);
>> subplot(122),imshow(K);

图像分割(matlab)
图像分割(matlab)#pic_center图像分割(matlab)

对于彩色图像来说,首先将其转换成灰度图像,然后再转换为二值图像

BW = im2bw(I,level)
BW = im2bw(X,map,level)
BW = im2bw(RGB,level)
level:阈值

>> I = imread('E:\persional\matlab\images\ln.tif');
>> [I1,map] = rgb2ind(I,64);%变成索引图像
>> J = ind2gray(I1,map);%索引图像转换成灰度图像
>> K = im2bw(I1,map,0.4);图像分割
>> figure,
>> subplot(131),imshow(I1);
>> subplot(132),imshow(J);
>> subplot(133),imshow(K);

图像分割(matlab)

Otsu阈值分割

最大方差法,该算法是在灰度直方图的基础上采用最小二乘法原理推导出来的,基本原理是以最佳的阈值将图像的灰度值分割成为两部分,使两部分之间的方差最大,即具有最大的分离性
设f(x,y)为大小为M×N图像f上(x,y)处的灰度值,灰度等级为L,则f(x,y)∈[0,L-1]。若灰度级i的所有像素个数为fi,则第i级灰度出现的概率为:p(i) = fi/(M×N)
将图像中的像素按灰度级用阈值t划分为两类。即背景C0和目标C1.背景C0的灰度级为0-t-1,目标C1的灰度级为t-L-1。背景C0和目标C1对应的像素分别为:{f(x,y)<t}和{f(x,y)>=t}
图像分割(matlab)
图像分割(matlab)
k的范围为0~L-1,计算不同k值下的类间方差,使得类间方差最大,k即为最优的阈值

level = graythresh(I)
level:最优的阈值

>> I = imread('E:\persional\matlab\images\house.tif');
>> I = im2double(I);
>> T = graythresh(I);
>> J = im2bw(I,T);
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imshow(J);

图像分割(matlab)

迭代式阈值分割

迭代阈值分割的步骤如下:
1、设定参数T0,并选择一个初始的估计阈值T1
2、用阈值T1分割图像。将图像分成两部分:G1是灰度值大于T1的像素组成,G2是小于或等于T1的像素组成
3、计算G1和G2中所有像素的平均灰度值μ1和μ2,以及新的阈值T2 = (μ1+μ2)/2
4、如果|T2-T1|<T0,则T2为最优阈值,否则T2赋值给T1,并重复步骤2~4,直到最优

>> I = imread('E:\persional\matlab\images\house.tif');
>> I = im2double(I);
>> T0 = 0.01;
>> 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)

区域分割技术

区域生长法

区域生长的基本思想是将具有相似性质的像素集合起来构成区域,其可以包括平均灰度值、纹理和颜色等信息。

分水岭分割

把图像看成一幅地形图,灰度值对应地形的高度值,高灰度值对应山峰,低灰度值对应山谷。水总是朝低势流动,知道低洼处,所有的水都会处于不同的盆地,盆地之间的山脊称为分水岭,分水岭分割相当于是一个自适应的多阈值分割算法

L = watershed(I)
L = watershed(I,conn)
L:标记矩阵,分水岭为0,第几个水盆就是几
conn:连通区域

>> I = imread('E:\persional\matlab\images\ba.tif');
>> J = watershed(I,8);
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imshow(J);

图像分割(matlab)文章来源地址https://www.toymoban.com/news/detail-439599.html

到了这里,关于图像分割(matlab)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像处理技术:数字图像分割 ------ 图像分割、边界分割(边缘检测)、区域分割

    是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分 成若干个互不相交的区域,使得这些特征在同一区域内表现出一致 性或相似性,而在不同区域间表现出明显的不同 分割出来的区域应该同时满足:  (1)分割出来的图像区域的均匀性和连通性。 • 均匀性是指该

    2024年02月04日
    浏览(44)
  • 数字图像处理:图像分割——边缘检测与区域分割

    1.图像分割:根据图像的某些局部特征(灰度级、纹理、彩色或统计特征等)的相似性和互斥性,将图像分割成若干子区域,在每个子区域内部具有相似(相同或相近)特性,而相邻子区域的特性互斥。所以图像分割是利用图像局部特征的相似性和互斥性。 2.图像分割方法分

    2024年02月05日
    浏览(40)
  • 数字图像处理:实验六 图像分割

    数据分割是由图像处理到图像分析的关键步骤,是图像识别和计算机视觉至关重要的预处理,图像分割后提取的目标可用于图像识别、特征提取,图像搜索等领域。图像分割的基本策略主要是基于图像灰度值的两个特性,即灰度的不连续性和灰度的相似性,因此图像分割方法

    2024年02月06日
    浏览(48)
  • Matlab|图像处理04|图像分割-阈值分割方法

    一、人工阈值分割方法threshold_test1.m 1、分析修改阈值对分割结果的影响 分析:取直方图中第一个谷底的灰度值作为阈值,图像分割效果较好。当阈值改变时,分割后的图像有部分信息丢失,本图中当阈值减小时分割后的图像黑色部分较多,当阈值增大时分割后的图像白色部

    2024年02月11日
    浏览(49)
  • NEFU数字图像处理(三)图像分割

    前景和背景 在图像分割中,我们通常需要将图像分为 前景和背景 两个部分。前景是指 图像中我们感兴趣、要分割出来的部分 ,背景是指和前景不相关的部分。例如,对于一张人物照片,人物就是前景,而周围环境则是背景。 区域 区域是指图像中一块连通的像素区域,这些

    2024年02月08日
    浏览(48)
  • MATLAB图像分割之阈值分割

            可以通过图像全局的信息,例如整个图像的灰度直方图。如果在整个图像中只使用一个阈值,则这种方法叫做全局阈值法,整个图象分成两个区域,即目标对象(黑色)和背景对象(白色)。全局阈值将整个图像的灰度阈值设置为常数。 I=imread(\\\'veg.png\\\'); figure,imshow(I); I2=r

    2024年02月07日
    浏览(44)
  • OpenCV数字图像处理基于C++:图像分割

    图像阈值化分割是一种常用的、传统的图像分割技术,因其 实现简单、计算量小、性能比较稳定 而成为图像分割中基本和应用广泛的分割技术。特别 适合于目标和背景占据不同灰度级范围的图像 。不仅 可以极大地压缩数据量 ,而且大大 简化了分析和处理的步骤 ,是进行

    2024年02月11日
    浏览(63)
  • 数字图像处理——实验五 基于图像分割的车牌定位识别

    (1)掌握车牌阈值分割; (2)掌握基于形态学计算的图像分割; (3)掌握图像的二值化; (4)掌握基于像素投影的字符分割; (5)掌握字符识别原理。 (1)计算机; (2)Python 3.x及PyCharm软件; (3)需进行车牌识别的图片。 注: opencv-python 使用的是3.x 版本 (1) 图像灰

    2024年02月08日
    浏览(66)
  • Matlab分割彩色图像

    彩色图像 彩色图像除有亮度信息外,还包含有颜色信息。以最常见的RGB(红绿蓝)彩色空间为例来简要说明彩色图像: 彩色图像可按照颜色的数目来划分。例如,256色图像和真彩色图像(2的16次方=216777216种颜色)等,通常RGB图像中每个像素都是用24位二进制数表示的,故也

    2024年02月11日
    浏览(29)
  • 【MATLAB】图像分割实验

    充分利用所学各种图像处理技术,实现对图像的综合处理,加深对基础知识的理解和应用。 (1)将已知图像进行消噪处理; (2)对彩色图像进行目标和背景分析; (3)自编多种分割算法(其中必须包含:最大类间分割、基于迭代的阈值分割、基于Hough变换、基于kmeans分割

    2024年02月04日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包