【深度学习】基于最小误差法的胸片分割系统(Matlab代码实现)

简介: 【深度学习】基于最小误差法的胸片分割系统(Matlab代码实现)

💥1 概述

近年我国胸部疾病感染者的数量急剧增加。世界卫生组织报告显示,我国胸部类疾病患者数量在全球位列第一,并且还统计出国内肺癌的发病率、死亡率在所有的癌症中都是极高的。胸部疾病已经成为一个非常大的威胁。为了实现对病人胸部CT图片有效分割,提高分割效率,本文提出一种基于最小误差的图像分割方法。该方法使用统计学的原理,对图像的直方图进行处理。一维最小误差阈值法假设了目标和背景的灰度分布服从混合正态分布。考虑到噪声等因素对图像质量的影响,在二维灰度直方图上,基于二维混合正态分布假设,给出一维最小误差阈值法的二维推广表达式,为了提高算法的运行速度。也给出了快速递推算法。实验表明,二维最小误差阈值法是一个有效的图像分割算法,能够更好地适应目标和背景方差相差较大的图像及噪声图像的分割问题。图像处理中的基础和重要步骤是图像分割。近年来,图像分割方法中加入了各种新的技术和新的理论,并创造了许多新的图像分割方法。图像分割改进的目的是提高图像分割结果的准确性和算法的有效性。计算机辅助检测技术中X线胸片肺部区域分割和腹部CT图像的肝脏组织分割是较为常见的医学诊断技术,对医学图像的研究分析有着重大的意义。

📚2 运行结果

部分代码:
clc; clear all; close all;
warning off all;
% 读取图像
filename = fullfile(pwd, 'images/test.jpg');
Img = imread(filename);
% 灰度化
if ndims(Img) == 3
    I = rgb2gray(Img);
else
    I = Img;
end
% 直接二值化
bw_direct = im2bw(I);
figure; imshow(bw_direct); title('直接二值化分割');
% 圈选胃区域空气
c = [1524 1390 1454 1548 1652 1738 1725 1673 1524];
r = [1756 1909 2037 2055 1997 1863 1824 1787 1756];
bw_poly = roipoly(bw_direct, c, r);
figure;
imshow(I, []);
hold on;
plot(c, r, 'r-', 'LineWidth', 2);
hold off;
title('胃区域空气选择');
% 设置胃内空气为255
J = I;
J(bw_poly) = 255;
% 图像增强
J = mat2gray(J);
J = imadjust(J, [0.532 0.72], [0 1]);
J = im2uint8(mat2gray(J));
figure; imshow(J, []); title('图像增强处理');
% 直方图统计
[counts, gray_style] = imhist(J);
% 亮度级别
gray_level = length(gray_style);
% 计算各灰度概率
gray_probability  = counts ./ sum(counts);
% 统计像素均值
gray_mean = gray_style' * gray_probability;
% 初始化
gray_vector = zeros(gray_level, 1);
w = gray_probability(1);
mean_k = 0;
gray_vector(1) = realmax;
ks = gray_level-1;
for k = 1 : ks
    % 迭代计算
    w = w + gray_probability(k+1);
    mean_k = mean_k + k * gray_probability(k+1);
    % 判断是否收敛
    if (w < eps) || (w > 1-eps)
        gray_vector(k+1) = realmax;
    else
        % 计算均值
        mean_k1 = mean_k / w;
        mean_k2 = (gray_mean-mean_k) / (1-w);
        % 计算方差
        var_k1 = (((0 : k)'-mean_k1).^2)' * gray_probability(1 : k+1);
        var_k1 = var_k1 / w;
        var_k2 = (((k+1 : ks)'-mean_k2).^2)' * gray_probability(k+2 : ks+1);
        var_k2 = var_k2 / (1-w);
        % 计算目标函数
        if var_k1 > eps && var_k2 > eps
            gray_vector(k+1) = 1+w * log(var_k1)+(1-w) * log(var_k2)-2*w*log(w)-2*(1-w)*log(1-w);
        else
            gray_vector(k+1) = realmax;
        end
    end
end
% 极值统计
min_gray_index = find(gray_vector == min(gray_vector));
min_gray_index = mean(min_gray_index);
% 计算阈值
threshold_kittler = (min_gray_index-1)/ks;
% 阈值分割
bw__kittler = im2bw(J, threshold_kittler);
% 显示
figure; imshow(bw__kittler, []); title('最小误差法分割');
% 形态学后处理
bw_temp = bw__kittler;
% 反色
bw_temp = ~bw_temp;
% 填充孔洞
bw_temp = imfill(bw_temp, 'holes');
% 去噪
bw_temp = imclose(bw_temp, strel('disk', 5));
bw_temp = imclearborder(bw_temp);
% 区域标记
[L, num] = bwlabel(bw_temp);
% 区域属性
stats = regionprops(L);
Ar = cat(1, stats.Area);
% 提取目标并清理
[Ar, ind] = sort(Ar, 'descend');
bw_temp(L ~= ind(1) & L ~= ind(2)) = 0;
% 去噪
bw_temp = imclose(bw_temp, strel('disk',20));
bw_temp = imfill(bw_temp, 'holes');
figure;
subplot(1, 2, 1); imshow(bw__kittler, []); title('待处理二值图像');
subplot(1, 2, 2); imshow(bw_temp, []); title('形态学后处理图像');
% 提取肺边缘
ed = bwboundaries(bw_temp);
% 显示
figure;
subplot(2, 2, 1); imshow(I, []); title('原图像');
subplot(2, 2, 2); imshow(J, []); title('增强图像');
subplot(2, 2, 3); imshow(bw_temp, []); title('二值化图像');
subplot(2, 2, 4); imshow(I, []); hold on;
for k = 1 : length(ed)
    % 边缘
    boundary = ed{k};
    plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 2);
end
title('肺边缘显示标记');
figure;
subplot(1, 2, 1); imshow(bw_temp, []); 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
title('肺边缘显示标记');

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。


[1]赵蓉. 基于深度学习的图像分割算法应用研究[D].南京邮电大学,2022.DOI:10.27251/d.cnki.gnjdc.2022.001006.


[2]赵婧秋. 复杂条件下基于形状特征的图像检索[D].西安电子科技大学,2019.DOI:10.27389/d.cnki.gxadu.2019.001818.


🌈4 Matlab代码实现

文章知识点与官方知识档案匹配,可进一步学习相关知识

OpenCV技能树OpenCV中的深度学习图像分类19721 人正在系统学习中


相关文章
|
13天前
|
算法
基于卡尔曼滤波的系统参数辨识matlab仿真
此程序采用卡尔曼滤波技术实现系统参数在线辨识,通过MATLAB 2022a仿真展现参数收敛过程、辨识误差,并比较不同信噪比下系统性能。卡尔曼滤波递归地结合历史估计与当前观测,优化状态估计。参数辨识中,系统参数被视为状态变量,通过迭代预测和更新步骤实现在线估计,有效处理了线性系统中的噪声影响。
|
9天前
|
存储 算法 Serverless
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
|
11天前
|
机器学习/深度学习 监控 算法
基于深度学习网络的人员行为视频检测系统matlab仿真,带GUI界面
本仿真展示了基于GoogLeNet的人员行为检测系统在Matlab 2022a上的实现效果,无水印。GoogLeNet采用创新的Inception模块,高效地提取视频中人员行为特征并进行分类。核心程序循环读取视频帧,每十帧执行一次分类,最终输出最频繁的行为类别如“乐队”、“乒乓球”等。此技术适用于智能监控等多个领域。
27 4
|
12天前
|
机器学习/深度学习 数据采集 算法
基于深度学习网络的USB摄像头实时视频采集与火焰检测matlab仿真
本项目使用MATLAB2022a实现基于YOLOv2的火焰检测系统。通过USB摄像头捕捉火焰视频,系统实时识别并标出火焰位置。核心流程包括:视频采集、火焰检测及数据预处理(图像标准化与增强)。YOLOv2模型经特定火焰数据集训练,能快速准确地识别火焰。系统含详细中文注释与操作指南,助力快速上手。
|
4天前
|
机器学习/深度学习
基于IEEE30电网系统的停电规模评价系统matlab仿真,对比IEEE118,输出停电规模,潮流分布和负载率等
本课题针对IEEE标准节点系统,通过移除特定线路模拟故障,计算其余线路的有功潮流分布系数及负载率变化。采用MATLAB2022a进行仿真,通过潮流计算确定电网运行状态,并以负载率评估负载能力。IEEE30与IEEE118系统对比显示,前者在故障下易过载,后者则因更好的拓扑结构拥有更高的负载裕度。
|
5天前
|
运维 算法 C++
MATLAB - 系统辨识 - 在线估计 - Online Estimation
MATLAB - 系统辨识 - 在线估计 - Online Estimation
15 0
|
13天前
|
算法
基于matlab的风力发电系统建模与详细性能仿真分析
本研究介绍风力发电原理与系统模型,使用MATLAB 2022a进行性能仿真。风力通过风轮转化为电能,涉及贝努利定理及叶素理论。仿真展示了风速与输出功率间的关系,包括风电利用系数、切入切出控制与MPPT控制效果。当风速超过25m/s时,系统自动停机保护设备。MPPT算法确保了在变化风速下获得最大功率。
|
11天前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
30 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
12天前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
37 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
12天前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
25 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码

热门文章

最新文章