目前深度学习在图像上有了突破性的发展,但是传统的图像处理算法在特定的场景下还是有很多应用的,今天我将分享在CT图像上来进行肺分割,并通过Opencv来实现。
1、用大津阈值法进行分割
由于CT图像特点,采用大津阈值法就可以实现将肺组织和人体骨骼脂肪分离开。
代码:cv::threshold(inputMat, outputMat, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
2、去除背景目标
从上面的分割结果可以看到,背景跟肺组织不是连通的区域,因此我们可以通过连通域分析去除与背景相连通的区域。代码:
cv::copyMakeBorder(inputMat, exapndMat, 3, 3, 3, 3, cv::BORDER_CONSTANT, cv::Scalar(0));
cv::floodFill(exapndMat, cv::Point(0, 0), cv::Scalar(255));
cv::Mat maskMat = ~exapndMat(cv::Rect(3, 3, inputMat.cols, inputMat.rows));
3、去除气管,噪声
气管和噪声区域都不是很大,我们通过设置区域面积大小来去除气管和噪声。
4、重构肺轮廓边缘
从上图可以看到,肺的边缘会有一些凹陷瑕疵,所以我们通过形态学闭操作来填补这些缺陷。代码:cv::morphologyEx(grayscale, MatOut, cv::MORPH_CLOSE, elemnt);
5、最后得到肺组织区域