matlab图像分割程序

matlab图像分割程序,第1张

clear I=imread('bai.jpg') %读入图像

q=imadjust(I,[.2 .3 0.6 .7 1],[])%增强图像的对比度

j=rgb2gray(q) %彩色图像变灰度图像

j1=im2bw(q,230/255)%二值化

se90=strel('line',3,90) %构造元素

se0=strel('line',3,0) %同上

BW2=imdilate(j1,[se90 se0]) % 用构造的元素膨胀

BW3=bwareaopen(BW2,100)%开 *** 作

BW3=~BW3%取反

BW4=bwareaopen(BW3,20)%开

BW5=bwperim(BW4)%计算BW4周长

[imx,imy]=size(BW5)计算长宽

L=bwlabel(BW5,8)%用不同的数字根据是否连通标记图像,

a=max(max(L))%得到L图像中标记结果的最大值

BW6=bwfill(BW5,'hole')%填充背景

I2=I

for i=1:3I2(:,:,i)=I2(:,:,i).*uint8(BW6)

end imshow(I2)有大神能逐条解释一下语句吗,本人是菜鸟啊,跪求!!

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')

直接用矩阵 *** 作就可以了,用imread读取图像,读取的结果在matlab中就是一个矩阵,然后用imwrite把你需要的部分写到新的文件中。

例如(时间有限,仅写了灰度图像的一部分):

I=imread('source.bmp')

n=ndims(I)%获得图像维数,如果是2就是灰度图像,3是彩色图像,需要分别处理

if n==2

[x,y]=size(I)%求图像大小

imwrite(I(1:round(x/4),1:round(y/4)),'file.bmp','bmp')

end

这样就把图像分成4*4,最左上角的图像保存到file.bmp中了。

思路大致如此,手头没有matlab,上班ing,供你参考。

以上。

专业路过的老狼


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12095225.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存