• 大小: 6KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: Matlab
  • 标签: 三维  区域生长  

资源简介

区域生长(region growing)是指将成组的像素或区域发展成更大区域的过程。从种子点的集合开始,从这些点的区域增长是通过将与每个种子点有相似属性像强度、灰度级、纹理颜色等的相邻像素合并到此区域。

资源截图

代码片段和文件信息

function [ROI]=compute_roi(strimg)
    [XYZ]=size(img);
%     slice=floor(Z/2);
    slice=70;
    gausFilter = fspecial(‘gaussian‘); 
    I = imfilter(imggausFilter);
    A=I(::slice);
    figure(1)imshow(A[])
    
    
[yx]=getpts;             %获得区域生长起始点
xx=round(x);            %横坐标取整
yy=round(y);            %纵坐标取整
zz=slice*ones(size(x));
for i=1:length(xx)
seed(i)=I(xx(i)yy(i)zz(i));  %将生长起始点灰度值存入seed中
end

ROI=zeros(XYZ);          %作一个全零与原图像等大的图像矩阵Y,作为输出图像矩阵
ROI(xxyyzz)=1;             %将Y中与所取点相对应位置的点设置为白场
sum=seed;              %储存符合区域生长条件的点的灰度值的和
suit=1;                 %储存符合区域生长条件的点的个数
count=1;               %记录每次判断一点周围八点符合条件的新点的数目
threshold1=100;       %域值
threshold2=400;

while count>0
    s=0;                  %记录判断一点周围点时,符合条件的新点的灰度值之和
    count=0;

    for i=1:X
        for j=1:Y
            for k=1:Z
                if ROI(ijk)==1
                    if (i-1)>0 && (i+1)<(X+1) && (j-1)>0 && (j+1)<(Y+1) && (k-1)>0 && (k+1)<(Z+1)  %判断此点是否为图像边界上的点
                        for u= -1:1                               %判断点周围八点是否符合域值条件
                            for v= -1:1                               %uv为偏移量
                                for w=-1:1
                                    if  ROI(i+uj+vk+w)==0 & abs(I(i+uj+vk+w)-seed)<=threshold1 & abs(I(i+uj+vk+w)-I(ijk))<=threshold2%判断是否未存在于输出矩阵Y,并且为符合域值条件的点
                                        ROI(i+uj+vk+w)=1;                       %符合以上两条件即将其在Y中与之位置对应的点设置为白场
                                        count=count+1;
                                        s=s+I(i+uj+vk+w);                      %此点的灰度之加入s中
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
    end
    suit=suit+count;                                   %将n加入符合点数计数器中
    sum=sum+s;                                     %将s加入符合点的灰度值总合中
    seed=sum/suit;                                    %计算新的灰度平均值
    figure(2);
    imshow(ROI(::slice))title(‘分割后图像‘)

end
roi=make_nii(ROI);
save_nii(roi[str(1:end-4)‘_roi300.nii‘]);
R=zeros(XYZ);
for i=1:Z
    R(::i)=imfill(ROI(::i)‘holes‘);
end
r=make_nii(R);
save_nii(r[str(1:end-4)‘_fill300.nii‘]);
end
% J = zeros(size(I)); % 主函数的返回值,记录区域生长所得到的区域  
% Isizes = size(I);  

% reg_size = 1;%分割的到的区域,初始化只有种子点一个  
% neg_free = 10000; %动态

评论

共有 条评论