回 帖 发 新 帖 刷新版面

主题:图像分割程序

用matlab编程实现彩色图像的局部分割

回复列表 (共3个回复)

沙发

这段程序是我在学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;

板凳


[em1]

3 楼

没看明白

我来回复

您尚未登录,请登录后再回复。点此登录或注册