主题:图像分割程序
lengxuelj
[专家分:60] 发布于 2008-03-05 09:38:00
用matlab编程实现彩色图像的局部分割
回复列表 (共3个回复)
沙发
永恒的回忆 [专家分:810] 发布于 2008-03-05 18:01:00
这段程序是我在学matlab时做的作业,当时为了求异和速度,采用矩阵作为算法的核心,不过我调试后
发现反而不够普通的采用循环判断结构的快,只是在代码上简洁点而已,不知道能不能符合你的要求。
有什么好建议,不妨提下。
1) function A=colordrawout(pix,n) %彩色图片轮廓线提取函数
2) figure;A=imread(pix); %读取指定彩色图片
3) [k,j]=size(A(:,:,1)); % k,j分别为2D矩阵的行数和列数
4) e=['红色强度值矩阵';'绿色强度值矩阵';'蓝色强度值矩阵'];
5) nn=n*ones(k,j); %阈值矩阵
6) for i=1:3 %依次从三个矩阵中提取轮廓线
7) H=double(A(:,:,i)); %将选择的矩阵变为双精度矩阵
8) F=40*sin(pi/2*1/255*H); %进行非线性变换
9) you=F(:,2:end); you(:,end+1)=0; %右矩阵
10) xia=F(2:end,:);xia(end+1,:)=0; %左矩阵
11) yx=F(2:end,2:end);yx(end+1,end+1)=0; %右下矩阵
12) %判断图片中任一点以其周围的点的差与给出的阈值的关系
13) yy=abs(F-you)-nn;yy(find(yy>0))=255;yy(find(yy<=0))=0;
14) xx=abs(F-xia)-nn;xx(find(xx>0))=255;yy(find(xx<=0))=0;
15) yx2=abs(F-yx)-nn;yx2(find(yx2>0))=255;yx2(find(yx2<=0))=0;
16) T=xx+yy+yx2;%满足其中一个就为边界
17) subplot(3,3,i+6); %将窗口分割为两行两列,下图显示于第i+1位置
18) %显示轮廓线 %图释 %保持图片显示比例
19) imshow(T); title(e(i,:)); axis image;
20) end;
21) subplot(3,3,2); %下图显示于第1位置
22) image(A); %显示原彩色图片
23) title('彩色图原图'); axis image; %图释%保持图片显示比例
24) r=A;g=A;b=A;r(:,:,2)=0;r(:,:,3)=0;g(:,:,1)=0;g(:,:,3)=0;b(:,:,1)=0;b(:,:,2)=0;
25) subplot(3,3,4);image(r);axis image; subplot(3,3,5);
26) image(g);axis image;subplot(3,3,6); image(b);axis image;
板凳
zhongjiaz [专家分:0] 发布于 2008-03-05 22:04:00
[em1]
3 楼
onlygh [专家分:0] 发布于 2008-03-27 17:45:00
没看明白
我来回复