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

## 📚2 运行结果

部分代码：
clc; clear all; close all;
warning off all;
% 读取图像
filename = fullfile(pwd, 'images/test.jpg');
% 灰度化
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.

🌈4 Matlab代码实现

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

|
3天前
|

【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码

15 6
|
4天前
|

【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现

13 3
|
4天前
|

【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码

9 0
|
1月前
|

**算法预览：** 图像显示无水印的2022a版MATLAB运行结果 **软件版本：** MATLAB 2022a **核心代码片段：** 省略展示 **理论概述：** NCL集成BP网络利用负相关提升泛化，结合多个弱模型减少错误关联。通过λ参数控制模型间负相关程度，λ&gt;0增强集成效果，提高预测准确性和系统稳健性。
23 6
|
3月前
|

168 1
|
3月前
|

48 0
|
4天前
|

【8月更文挑战第6天】随着人工智能的飞速发展，深度学习技术已广泛应用于医疗影像分析领域。本文章将探讨深度学习如何革新传统医疗诊断流程，提高疾病预测和诊断的准确性，以及在实际应用中遇到的挑战和限制。通过具体案例分析，本文旨在揭示深度学习在处理复杂医疗数据时的强大潜力及其未来发展的可能性。
104 68
|
2天前
|

【8月更文挑战第9天】本文将深入探讨深度学习技术在自然语言处理领域的应用及其面临的挑战。我们将分析深度学习如何改变了自然语言处理的面貌，包括其在语音识别、机器翻译和情感分析等方面的突破性进展。同时，我们也将讨论深度学习在处理自然语言时遇到的挑战，如数据偏差问题、模型的可解释性以及计算资源的需求等。通过本文，读者将获得对深度学习在自然语言处理领域应用的全面理解，以及未来研究的潜在方向。
13 5
|
2天前
|

【8月更文挑战第9天】随着人工智能的飞速发展，深度学习技术已成为推动现代科技革新的关键力量。特别是在图像识别领域，深度学习模型凭借其强大的特征提取能力和分类精度，已广泛应用于面部识别、自动驾驶等多个场景。本文将探讨深度学习在图像识别中的具体应用实例，分析当前面临的主要挑战，并预测未来发展趋势。
11 4
|
3天前
|

15 5