目的
实现对肝脏CT图像中肝脏区域的分割,以助于计算机辅助诊断,病变组织定位,三维重建,治疗方案设计等.方法:采用基于区域生长的邻接连续阈值法实现对肝脏CT图像中肝脏组织的分割.结果:该方法能非常理想地将目标与背景分离,同时将过分割现象减到最少.结论:该方法计算简单,耗时较短,适用于不太复杂和对比比较明显的图像的分割.
区域生长法
- (1)种子点的选择.本文采用的是以种子区域代替种子点的方法来减少误选.对于 CT腹部图像的分割,一定的人工参与是非常必要的,在系能飽指导下选择合适的种子点有利于更合理地分割出不同的组织.在分割肝脏区域时,考虑到肝脏区域较大,用较大的种子区域去代替种子点较合理;而血管区域小,用小种子区域去代替种子点是比较合适的. 在大量实验的基础上,本文分割肝脏时采用了3x3 的区域代替种子点,而分割血管时采用了2×2的区域去代替种子点,取得了良好的效果
- (2)生长规则的确定.区域生长的一个关键是选择合适的生长或相似准则,大部分区域生长准则使用图像的局部性质. 本文算法采用基于区域灰度差准则.设己经分割的像素灰度平均值为又,当前元素灰度值为y,若满足|y-x|≤ T则合并,并且更新又=(n米又+y)/(n+1),其中「为國值,n为已经合并的元素个数;否则不合并.
- (3) 生长國值的设置.针对肝脏区域,其初始國值是通过计算以种子点为中心、5x5 区域的灰度方差的两倍来计算的,针对血管区域,以种子点为中心的3 x3 区域的灰度来计算,肝脏灰度國作的计算公式如下:
当然,在國值的设置上,该方法得到的阈值不一定是分割效果最佳的國值.为此,在程序设计中用户亦可以通过经验,人为设置國值。
源代码
准备图片
clc; clear all; close all;
I = imread(fullfile(pwd, 'images/test.jpg'));
X = imadjust(I, [0.2 0.8], [0 1]);
阈值分割
bw = im2bw(X, graythresh(X));
[r, c] = find(bw);
rect = [min(c) min(r) max(c)-min(c) max(r)-min(r)];
Xt = imcrop(X, rect);
自动获取种子点
seed_point = round([size(Xt, 2)*0.15+rect(2) size(Xt, 1)*0.4+rect(1)]);
X = im2double(im2uint8(mat2gray(X)));
X(1:rect(2), :) = 0;
X(:, 1:rect(1)) = 0;
X(rect(2)+rect(4):end, :) = 0;
X(:, rect(1)+rect(3):end) = 0;
[J, seed_point, ts] = Regiongrowing(X, seed_point);
figure(1);
subplot(1, 2, 1); imshow(I, []);
hold on;
plot(seed_point(1), seed_point(2), 'ro', 'MarkerSize', 10, 'MarkerFaceColor', 'r');
title('种子点自动选择');
hold off;
subplot(1, 2, 2); imshow(J, []); title('区域生长图像');
形态学后处理
bw = imfill(J, 'holes');
bw = imopen(bw, strel('disk', 5));
提取边缘
ed = bwboundaries(bw);
figure;
subplot(1, 2, 1); imshow(bw, []); title('形态学后处理图像');
subplot(1, 2, 2); imshow(I);
hold on;
for k = 1 : length(ed)
% 边缘
boundary = ed{k};
plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 2);
end
hold off;
title('边缘标记图像');
结果展示
获取完整工程
球球:371596993