基于Matlab的彩色图像分割

合集下载

基于MATLAB的图像分割技术

基于MATLAB的图像分割技术

利用阀值法对图像进行分割:>> f=imread('peppers.png');>> f=rgb2gray(f);>> f=im2double(f);>> t=0.5*(min(f(:))+max(f(:)));>> done=false;>> while ~doneg=f>=t;tn=0.5*(mean(f(g))+mean(f(~g)));done=abs(t-tn)<0.1;t=tn;end;>> display('Threshold(t)-Iterative'); Threshold(t)-Iterative>> tt =0.4691>> r=im2bw(f,t);>> subplot(2,2,1);imshow(f);>> subplot(2,2,2);imshow(r);>> xlabel('迭代法全局阀值分割');>> th=graythresh(f);>> thth =0.3961>> s=im2bw(f,th);>> subplot(2,2,3);imshow(s);>> xlabel('全局阀值Otsu分割');>> se=strel('disk',10);>> ft=imtophat(f,se);>> thr=graythresh(ft);>> thrthr =0.1098>> lt=im2bw(ft,thr);>> subplot(2,2,4);imshow(lt);>> xlabel('局部阀值分割');用迭代法对图像进行分割:>> i=imread('eight.tif');>> zmax=max(max(i));>> zmin=min(min(i));>> tk=(zmax+zmin)/2;>> bcal=1;>> isize=size(i);>> while (bcal)ifg=0;ibg=0;fg=0;bg=0;for j=1:isize(1)for k=1:isize(2)tmp=i(j,k);if(tmp>=tk)ifg=ifg+1;fg=fg+double(tmp);elseibg=ibg+1;bg=bg+double(tmp);end;end;end;zo=fg/ifg;zb=bg/ibg;tktmp=uint8((zo+zb)/2);if(tktmp==tk)bcal=0;elsetk=tktmp;end;end;>> disp(strcat('迭代后阀值',num2str(tk))); 迭代后阀值165>> newi=im2bw(i,double(tk)/255);>> subplot(1,2,1);imshow(i);>> subplot(1,2,2);imshow(newi);>> xlabel('迭代法');用Otsu法进行阀值选择:>> i=imread('coins.png');>> subplot(1,2,1);imshow(i);>> bw=im2bw(i,graythresh(getimage)); >> subplot(1,2,2);imshow(bw);使用分水岭算法对图像进行分割:>> c1=-10;>> c2=-c1;>> dist=sqrt(2*(2*c1)^2);>> rad=dist/2*1.4;>> li=[floor(c1-1.2*rad) ceil(c2+1.2*rad)];>> [x,y]=meshgrid(li(1):li(2));>> bw1=sqrt((x-c1).^2+(y-c1).^2)<=rad;>> bw2=sqrt((x-c2).^2+(y-c2).^2)<=rad;>> bw=bw1|bw2;>> subplot(1,3,1);imshow(bw);>> d=bwdist(~bw);>> subplot(1,3,2);imshow(d,[]);>> d=-d;>> d(~bw)=-Inf;>> l=watershed(d);>> rgb=label2rgb(l,'jet',[.5 .5 .5]);>> subplot(1,3,3);imshow(rgb);使用分水岭算法:>> c1=-10;>> c2=-c1;>> dist=sqrt(3*(2*c1)^2);>> rad=dist/2*1.4;>> li=[floor(c1-1.2*rad) ceil(c2+1.2*rad)];>> [x,y,z]=meshgrid(li(1):li(2));>> bw1=sqrt((x-c1).^2+(y-c1).^2+(z-c1).^2)<=rad; >> bw2=sqrt((x-c2).^2+(y-c2).^2+(z-c2).^2)<=rad; >> bw=bw1|bw2;>> figure;isosurface(x,y,z,bw,0.5);axis equal;>> set(gcf,'color','w');>> xlim(li);ylim(li);zlim(li);>> view(3);camlight;lighting gouraud;>> d=bwdist(~bw);>> figure;isosurface(x,y,z,d,rad/2);axis equal;>> set(gcf,'color','w');>> xlim(li);ylim(li);zlim(li);>> view(3);camlight;lighting gouraud;>> d=-d;>> d(~bw)=-Inf;>> l=watershed(d);>> figure;>> isosurface(x,y,z,l==2,0.5);>> isosurface(x,y,z,l==3,0.5);>> axis equal;>> set(gcf,'color','w');>> xlim(li);ylim(li);zlim(li);>> view(3);camlight;lighting gouraud;改进的Watershed算法分割图像:>> i=imread('cameraman.tif'); >> subplot(2,3,1);imshow(i);>> i=double(i);>> hv=fspecial('prewitt');>> hh=hv.';>> gv=abs(imfilter(i,hv,'replicate')); >> gh=abs(imfilter(i,hh,'replicate'));>> g=sqrt(gv.^2+gh.^2);>> subplot(2,3,2);df=bwdist(i); >> imshow(uint8(df*8));>> l=watershed(df);>> em=l==0;>> subplot(2,3,3);imshow(em); >> im=imextendedmax(i,20);>> subplot(2,3,4);imshow(im);>> g2=imimposemin(g,im|em); >> subplot(2,3,5);imshow(g2);>> l2=watershed(g2);>> wr2=l2==0;>> i(wr2)=255;>> subplot(2,3,6);imshow(uint8(i));使用区域生长法对图像进行分割:>> i=imread('peppers.png'); >> i=rgb2gray(i);>> i1=double(i);>> s=255;>> t=55;>> if numel(s)==1si=i1==s;s1=s;elsesi=bwnorph(s,'shrink',Inf);j=find(si);s1=i1(j);end;>> ti=false(size(i1));>> for k=1:length(s1)sv=s1(k);s=abs(i1-sv)<=t;ti=ti|s;end;>> [g,nr]=bwlabel(imreconstruct(si,ti));>> subplot(1,2,1);imshow(i);>> subplot(1,2,2);imshow(g);>> nrnr =2对给定图像进行四叉树分解:>> i=imread('liftingbody.png');>> s=qtdecomp(i,.27);>> blocks=repmat(uint8(0),size(s));>> for dim=[512 256 128 64 32 16 8 4 2];numblocks=length(find(s==dim));if(numblocks>0)values=repmat(uint8(1),[dim dim numblocks]);values(2:dim,2:dim,:)=0;blocks=qtsetblk(blocks,s,dim,values);end;end;>> blocks(end,1:end)=1;>> blocks(1:end,end)=1;>> subplot(1,2,1);imshow(i);>> subplot(1,2,2);imshow(blocks,[]);提取四叉树分解的子块信息:>> i=[1 1 1 1 2 3 6 61 12 1 4 5 6 81 1 1 1 10 15 7 71 1 1 1 20 25 7 720 22 20 22 1 2 3 420 22 22 20 5 6 7 820 22 20 20 9 10 11 1222 22 20 20 13 14 15 16]; >> s=qtdecomp(i,5);>> [vals,r,c]=qtgetblk(i,s,4)vals(:,:,1) =1 1 1 11 12 11 1 1 11 1 1 1 vals(:,:,2) =20 22 20 2220 22 22 2020 22 20 2022 22 20 20r =15c =11>> i=[1 1 1 1 2 3 6 61 12 1 4 5 6 81 1 1 1 10 15 7 71 1 1 1 20 25 7 720 22 20 22 1 2 3 420 22 22 20 5 6 7 820 22 20 20 9 10 11 1222 22 20 20 13 14 15 16];>> s=qtdecomp(i,5);>> newvals=cat(3,zeros(4),ones(4));>> j=qtsetblk(i,s,4,newvals)j =0 0 0 0 2 3 6 60 0 0 0 4 5 6 80 0 0 0 10 15 7 70 0 0 0 20 25 7 71 1 1 1 123 41 1 1 1 5 6 7 81 1 1 1 9 10 11 121 1 1 1 13 14 15 16 使用Roberts边缘检测算子对图像进行边缘检测:>> i=imread('circuit.tif');>> bw1=edge(i,'roberts');>> subplot(1,2,1);imshow(i);>> subplot(1,2,2);imshow(bw1);使用Sobel进行边缘检测:>> i=imread('circuit.tif');>> bw1=edge(i,'roberts');>> subplot(1,2,1);imshow(i); >> subplot(1,2,2);imshow(bw1); >> clear;>> image=imread('circuit.tif'); >> i0=edge(image,'sobel');>> i1=edge(image,'sobel',0.06); >> i2=edge(image,'sobel',0.04); >> i3=edge(image,'sobel',0.02); >> subplot(2,3,1);imshow(image); >> subplot(2,3,2);imshow(i0); >> subplot(2,3,3);imshow(i1); >> subplot(2,3,4);imshow(i2); >> subplot(2,3,5);imshow(i3);使用Prewitt算子进行边缘检测:>> i=imread('rice.png');>> subplot(2,2,1);imshow(i);>> bw3=edge(i,'prewitt');>> subplot(2,2,2);imshow(bw3);>> [bw3,th3]=edge(i,'prewitt');>> bw3=edge(i,'prewitt',0.05,'horizontal'); >> subplot(2,2,3);imshow(bw3);>> bw3=edge(i,'prewitt',0.05,'vertical'); >> subplot(2,2,4);imshow(bw3);使用Log算子进行边缘检测:>> i=imread('circuit.tif');>> [bw1,th]=edge(i,'log');>> subplot(2,3,1);imshow(i);>> subplot(2,3,2);imshow(bw1); >> bw2=edge(i,'log',0.0056);>> subplot(2,3,3);imshow(bw2); >> h=fspecial('gaussian',5);>> [bw3,th3]=edge(i,'zerocross',[],h); >> subplot(2,3,4);imshow(bw3); >> bw4=edge(i,'zerocross',0.025,h); >> subplot(2,3,5);imshow(bw4);使用Canny算子进行边缘检测:>> i=imread('circuit.tif');>> subplot(1,3,1);imshow(i);>> [bw,th]=edge(i,'canny');>> subplot(1,3,2);imshow(bw);>> [bw1,th1]=edge(i,'canny',[0.2,0.6]); >> subplot(1,3,3);imshow(bw1);。

基于matlab的彩色图像皮肤区域分割及人脸检测

基于matlab的彩色图像皮肤区域分割及人脸检测

基于matlab的彩色图像皮肤区域分割及人脸检测目录第一章引言 (1)第二章算法理论与实现原理 (1)2.1肤色分割理论 (1)2.2常见肤色模型比较 (2)2.2.1 区域模型 (2)2.2.2简单高斯模型 (2)2.2.3 混合高斯模型 (2)2.2.4 直方图模型 (3)2.3常见色彩空间比较 (3)2.3.1RGB .........................................................32.3.2HSV...........................................................42.3.3YcbCr........................................................4 第三章系统设计 (7)3.1建立肤色模型 (7)3.2肤色分割步骤 (8)第四章参考文献 (12)第五章心得体会 (12)第一章引言近年来,随着人工智能的快速发展,人脸识别技术逐渐成为模式识别与计算机视觉领域的一个研究热点,可用于身份认证、人员监视、图像数据库检索以及目标跟踪等场合。

第 1 页共 16 页人脸识别(Face Recognition)是将输入的人脸图像与系统已知人脸库中的模型进行比较,以确定是否存在相匹配的人脸,而人脸检测( Face Detection) 是指在输入图像中确定所存在的人脸的位置与大小,所以快速有效的人脸检测则显得至关重要,是实现人脸识别的前提和基础。

人脸检测系统要求实现对输入的可能包含人脸的图像进行处理,并输出图像中是否存在人脸以及人脸的数目、位置、尺度、位姿等参数信息。

传统的人脸检测方法大多是在亮度空间内进行,利用灰度的变化做多尺度空间的全搜索,计算量非常大、效率极低,而在人脸区域中,肤色一定是占主导地位的像素色彩值,虽然肤色因人而异,但经过研究可以发现肤色在色彩空间中的一定范围内是呈聚类特性的,特别是在排除了光照亮度和在经过变换的色彩空间中,利用肤色这一特征可以排除掉在灰度图像中的非皮肤区域,这对人脸检测起到了积极的作用。

matlab中colorseg函数用法

matlab中colorseg函数用法

文章标题:深度剖析Matlab中colorseg函数的用法及优势1. 深入解析colorseg函数Matlab中的colorseg函数是一个用于颜色过滤和区分的重要工具,它的作用是能够从图像中提取特定颜色的对象。

在处理图像时,经常需要对不同颜色的对象进行识别和分割,而colorseg正是为此而设计的。

通过colorseg函数,我们可以根据我们所感兴趣的颜色区域对图像进行分割和处理,使得我们能更方便地进行后续的图像处理和分析工作。

2. colorseg的使用方法在使用colorseg函数时,首先需要选择被分割图像的颜色空间,通常可以选择RGB、HSV或Lab等不同的颜色空间。

我们需要设定感兴趣的颜色范围,通常通过设定颜色的上下界来实现。

将colorseg应用到图像上,就可以得到我们所需的分割结果。

在实际使用中,我们还可以对分割后的结果进行后续的处理和分析,如计算感兴趣区域的面积、轮廓检测等。

3. colorseg的优势相比于其他图像处理工具,colorseg函数具有一些独特的优势。

它能够有效地实现对特定颜色对象的分割,这对于一些应用场景中特定颜色对象的识别和提取非常有帮助。

colorseg还能够通过调整颜色区间来适应不同的环境和光照条件,使得对特定颜色对象的识别更加稳健和可靠。

colorseg的算法设计和实现相对简单,易于理解和使用,使得它成为了在图像处理中被广泛使用的工具之一。

4. 个人观点和理解在我看来,colorseg函数的使用对于图像处理和分析工作非常有帮助。

它可以帮助我们在复杂的图像场景中有效地提取所需的特定颜色对象,为后续的图像分析和识别工作提供了便利。

colorseg函数的简单使用方法和稳健的算法设计,使得它成为了我在图像处理中的重要工具之一。

总结:通过对colorseg函数的深入剖析,我们了解了它在图像处理中的重要作用和优势,同时也提供了我个人对该函数的观点和理解。

在实际应用中,我相信colorseg函数将为我在图像处理领域的工作提供很大的帮助。

浅析基于MATLAB的图像分割方法

浅析基于MATLAB的图像分割方法

像 中要提取 的 目标 物 与其背 景在灰 度特 性上 的差异 ,通过
设 置 合 适 的 灰 度 门 限 ( 值 ) 将 图 像 的 灰 度 划 分 为 两 个 或 阈 , 多个 灰 度 区 间 , 以确 定 有 意 义 的 区 域 或 分 割 物 体 的边 界 。 阈 值 分 割 常 用 于 图像 的 二 值 化 处 理 , 选 择 一 个 合 适 的 阈值 , 即 通 过 判 断 图像 中 的 每 一 个 像 素 点 的 特 征 属 性 是 否 满 足 阂 值
绍, 重点对 边缘检 测技 术的几 种常用 算 子进行 比较分 析 , 并 通 过 MAT AB 数 字 图 像 处 理 工 具 编 程 实 现 基 于 各 算 子 的 L
边缘 检测 。
2 .基 于 阈 值 的 图像 分 割 阈 值 分 割 『 一 种 常 用 的 图 像 分 割 方 法 , 主 要 利 用 图 2 1 是 它
阈值 分 割 。
对 于 图像 函数 r ,)它 在像 素 点( ,) 的梯 度 是一 ( y, x xy处
个矢量 , 义为: 定
Gx) [ ] E’=票 fy (]
梯度有 两个重要特性 : () 度 的方 向 为 函 数 f ,) 大 变 化 率 的 方 向 ; 1梯 ( Y最 x
划分成若 干个这样 的有意义 区域 的过程 , 各区域是具有 相近
特 性 的像 素 的连 通 集 合 。
始 区域 , 根据给定 的均 匀性检测准 则进行分裂 和合并这些 区
域 , 步 改 善 区 域 划 分 的 性 能 , 至 最 后 将 图 像 分 成 数 量 最 逐 直 少 的均匀区域 为止。 4 .基 于 边 缘 检 测 的 图 像 分 割 及 算 子 分 析 边 缘 是 指 图 像 中像 素 灰 度 值 或 色 彩 等 属 性 有 突 变 的 像 素 的集 合 , 存 在 于 目标 与 背 景 、 它 目标 与 目标 之 间 , 含 了丰 包 富 的 图 像 信 息 。基 于 边 缘 检 测 [ 图 像 分 割 正 是利 用 边 缘 的 2 ] 的 灰 度 变 化 特 性 , 过 考 察 图 像 中各 像 素 在 某 个 邻 域 内 灰 度 的 通

基于Matlab的彩色图像分割

基于Matlab的彩色图像分割

3 Matlab编程实现3.1 Matlab编程过程用Matlab来分割彩色图像的过程如下:1)获取图像的RGB颜色信息。

通过与用户的交互操作来提示用户输入待处理的彩色图像文件路径;2)RGB彩色空间到lab彩色空间的转换。

通过函数makecform()和applycform()来实现; 3)对ab分量进行Kmean聚类。

调用函数kmeans()来实现;4)显示分割后的各个区域。

用三副图像分别来显示各个分割目标,背景用黑色表示。

3.2 Matlab程序源码%文件读取clear;clc;file_name = input('请输入图像文件路径:','s');I_rgb = imread(file_name); %读取文件数据figure();imshow(I_rgb); %显示原图title('原始图像');%将彩色图像从RGB转化到lab彩色空间C = makecform('srgb2lab'); %设置转换格式I_lab = applycform(I_rgb, C);%进行K-mean聚类将图像分割成3个区域ab = double(I_lab(:,:,2:3)); %取出lab空间的a分量和b分量nrows = size(ab,1);ncols = size(ab,2);ab = reshape(ab,nrows*ncols,2);nColors = 3; %分割的区域个数为3[cluster_idx cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean','Replicates',3); %重复聚类3次pixel_labels = reshape(cluster_idx,nrows,ncols);figure();imshow(pixel_labels,[]), title('聚类结果');%显示分割后的各个区域segmented_images = cell(1,3);rgb_label = repmat(pixel_labels,[1 1 3]);for k = 1:nColorscolor = I_rgb;color(rgb_label ~= k) = 0;segmented_images{k} = color;endfigure(),imshow(segmented_images{1}), title('分割结果——区域1'); figure(),imshow(segmented_images{2}), title('分割结果——区域2'); figure(),imshow(segmented_images{3}), title('分割结果——区域3');。

使用MATLAB进行图像分割的步骤

使用MATLAB进行图像分割的步骤

使用MATLAB进行图像分割的步骤图像分割是一种将图像划分为具有独立意义的不同区域的技术。

它在计算机视觉、模式识别、医学影像等领域具有广泛的应用。

MATLAB作为一种强大的编程语言和开发环境,为图像处理提供了丰富的功能和工具。

本文将介绍使用MATLAB进行图像分割的步骤。

一、图像预处理在进行图像分割之前,通常需要对图像进行预处理。

预处理的目的是消除图像中的噪声和无关信息,以提高分割的准确性和效果。

常见的图像预处理步骤包括:1. 图像灰度化:将彩色图像转换为灰度图像,简化处理过程。

2. 图像滤波:使用滤波器去除图像中的噪声,如中值滤波器、高斯滤波器等。

3. 图像增强:增强图像的对比度和清晰度,以便更好地分割图像。

二、阈值分割阈值分割是最常用和简单的图像分割方法之一。

它基于图像中像素灰度值与阈值之间的关系,将像素分为前景和背景。

使用MATLAB进行阈值分割的步骤如下:1. 选择合适的阈值:通过观察图像直方图和图像特性,选择一个适合的阈值。

2. 阈值分割:将图像中的像素根据阈值进行分类,得到分割后的图像。

三、基于边缘的分割边缘是图像中物体和背景之间的边界,通过检测边缘可以达到图像分割的目的。

使用MATLAB进行基于边缘的分割的步骤如下:1. 图像梯度计算:通过计算图像中每个像素的梯度值,得到图像中每个点的边缘强度。

2. 边缘检测:使用一些经典算法(如Sobel算子、Canny算子)进行边缘检测,得到图像中的边缘。

3. 边缘连接:根据边缘的连接关系,将分散的边缘点连接成连续的边缘线。

四、区域生长分割区域生长分割是一种基于相似性的分割方法,它将相似的像素点合并成具有相同属性的区域。

使用MATLAB进行区域生长分割的步骤如下:1. 种子点选择:选择适当的种子点,作为区域生长的起始点。

2. 区域生长:从种子点开始,逐渐将相邻像素合并到同一区域中,直到满足预设的停止条件。

五、基于聚类的分割聚类是一种将数据划分为不同组别的方法,也可以用于图像分割。

如何在Matlab中进行图像分割

如何在Matlab中进行图像分割

如何在Matlab中进行图像分割图像分割是图像处理中十分重要的一项技术,它能够将图像划分为多个具有独立意义的区域,有助于进一步的图像分析和处理。

在Matlab中进行图像分割,我们可以利用许多现成的函数和工具箱,使得整个过程更加高效和便捷。

本文将介绍如何在Matlab中进行图像分割,包括基于阈值的分割方法、基于边缘的分割方法以及基于区域的分割方法。

首先,基于阈值的分割方法是最简单和常用的图像分割方法之一。

它基于图像的亮度或颜色信息,将图像分为不同的区域。

在Matlab中,我们可以使用im2bw 函数将彩色图像转换为二值图像,然后使用graythresh函数或multithresh函数确定适当的阈值。

例如,下面的代码演示了如何使用阈值进行图像分割:```matlabimg = imread('image.jpg');grayImg = rgb2gray(img);threshold = graythresh(grayImg);binaryImg = im2bw(grayImg, threshold);```其次,基于边缘的分割方法是通过检测图像中的边缘信息来实现图像分割。

在Matlab中,我们可以使用一系列边缘检测算法,如Sobel算子、Canny算子等。

这些算法可以提取图像中的边缘信息,并将其转化为二值图像。

下面的代码演示了如何使用Canny算子进行图像分割:```matlabimg = imread('image.jpg');grayImg = rgb2gray(img);edgeImg = edge(grayImg, 'canny');```最后,基于区域的分割方法是将图像分为具有相似纹理、颜色或形状特征的区域。

在Matlab中,我们可以使用基于区域的分割算法,如分水岭算法、区域生长算法等。

这些算法可以通过对图像进行区域合并或区域分裂来实现图像分割。

基于MATLAB的图像伪彩色处理

基于MATLAB的图像伪彩色处理

图像伪彩色处理近几年来,随着多媒体技术和因特网的迅速发展和普及,数字图像处理技术受到了前所未有的广泛重视,出现了许多新的应用领域。

最显著的是数字图像处理技术已经从工业领域、实验室走入了商业领域及办公室,甚至走入了人们的日常生活。

由于彩色图像提供了比灰度图像更为丰富的信息,因此彩色图像处理正受到人们越来越多的关注。

伪彩色处理是根据特定的准则对灰度值赋以彩色的处理。

由于人眼对彩色的分辨率远高于对灰度差的分辨率,所以这种技术可用来识别灰度差较小的像素。

这是一种视觉效果明显而技术又不是很复杂的图像增强技术。

灰度图像中,如果相邻像素点的灰度相差大,人眼将无法从图像中提取相应的信息,因为人眼分辨灰度的能力很差,一般只有几十个数量级,但是人眼对彩色信号的分辨率却很强,这样将黑白图像转换为彩色图像后,人眼可以提取更多的信息量。

同时MATLAB技术对于我们实现数字图像处理是一种非常有效的实用工具。

1.引言进入21世纪以来,随着微电子技术、计算机技术、现代通信技术的飞速发展,人类社会正健步迈入信息化时代。

在人类所接收到的全部信息中,70%以上的通过视觉得到的。

因此对数字图像进行有效地处理变换十分重要,而且彩色图像占很大的比例,所以,对彩色图像的处理显得尤为重要。

其中伪彩色处理技术就是一项很重要的图像处理技术。

伪彩色处理是指将黑白图像转化为彩色图像,或者是将单色图像变换成给定彩色分布的图像。

由于人眼对彩色的分辨率远高于对灰度差的分辨率,所以这种技术可用来识别灰度差较小的像素。

这是一种视觉效果明显而技术又不是很复杂的图像增强技术。

灰度图像中,如果相邻像素点的灰度相差大,人眼将无法从图像中提取相应的信息,因为人眼分辨灰度的能力很差,一般只有几十个数量级,但是人眼对彩色信号的分辨率却很强,这样将黑白图像转换为彩色图像后,人眼就可以提高对图像细节的辨别力,提取更多的信息量。

因此,伪彩色处理的主要目的是为了提高人眼对图像的细节的分辨能力,以达到图像增强的目的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3 Matlab编程实现
3.1 Matlab编程过程
用Matlab来分割彩色图像的过程如下:
1)获取图像的RGB颜色信息。

通过与用户的交互操作来提示用户输入待处理的彩色图像文件路径;
2)RGB彩色空间到lab彩色空间的转换。

通过函数makecform()和applycform()来实现; 3)对ab分量进行Kmean聚类。

调用函数kmeans()来实现;
4)显示分割后的各个区域。

用三副图像分别来显示各个分割目标,背景用黑色表示。

3.2 Matlab程序源码
%文件读取
clear;
clc;
file_name = input('请输入图像文件路径:','s');
I_rgb = imread(file_name); %读取文件数据
figure();
imshow(I_rgb); %显示原图
title('原始图像');
%将彩色图像从RGB转化到lab彩色空间
C = makecform('srgb2lab'); %设置转换格式
I_lab = applycform(I_rgb, C);
%进行K-mean聚类将图像分割成3个区域
ab = double(I_lab(:,:,2:3)); %取出lab空间的a分量和b分量
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
nColors = 3; %分割的区域个数为3
[cluster_idx cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean','Replicates',3); %重复聚类3次
pixel_labels = reshape(cluster_idx,nrows,ncols);
figure();
imshow(pixel_labels,[]), title('聚类结果');
%显示分割后的各个区域
segmented_images = cell(1,3);
rgb_label = repmat(pixel_labels,[1 1 3]);
for k = 1:nColors
color = I_rgb;
color(rgb_label ~= k) = 0;
segmented_images{k} = color;
end
figure(),imshow(segmented_images{1}), title('分割结果——区域1'); figure(),imshow(segmented_images{2}), title('分割结果——区域2'); figure(),imshow(segmented_images{3}), title('分割结果——区域3');。

相关文档
最新文档