资源简介
基于matlab的最小误差法的胸片分割系统。最小误差分隔法是一种快速有效的分隔算法,通过假设目标和北京的灰度分布服从混合告诉正态分布,能够更好地适应于医学图像的灰度分布特点,取得有效的目标分隔方法,代码亲测可用,有很高的参考价值

代码片段和文件信息
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)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 38614 2017-05-02 08:41 第 26 章 基于最小误差法的胸片分割系统\MainForm.fig
文件 10076 2017-05-02 12:37 第 26 章 基于最小误差法的胸片分割系统\MainForm.m
目录 0 2017-06-30 22:08 第 26 章 基于最小误差法的胸片分割系统\images\
文件 1017598 2017-05-01 21:51 第 26 章 基于最小误差法的胸片分割系统\images\test.jpg
文件 3519 2017-05-02 09:21 第 26 章 基于最小误差法的胸片分割系统\main.m
目录 0 2017-07-18 13:30 第 26 章 基于最小误差法的胸片分割系统\
- 上一篇:基于matlab块匹配的全景图像拼接.zip
- 下一篇:MATLAB程序
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论