Matlab 高斯_拉普拉斯滤波器处理医学图像
前言:本程序是我去年实现论文算法时所做。主要功能为标记切割肝脏区域。时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述。
NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像还是有一定的借鉴意义
想借鉴本文的一定要仔细阅读代码和注释,中间有人机交互部分,空跑会抛异常
.dcm数据,我放到了我的百度云盘,有兴趣的可以下载,实测一下代码。dcm数据连接
clc,clear
img_1=dicomread('10011.dcm');%读取dcm文件 (所谓的灰度值)
metadata=dicominfo('10011.dcm');%获取dcm文件的信息
% figure
% imagesc(img_1);
% imshow(uint8(img_1));
Hu0=(int16(img_1)*1+(-1024));
%文档中的第二步,转为CT值的那个。
%% 窗宽窗位设置:c 窗位 w 窗宽 这个是按照你给的公式写的
Hu=double(Hu0);%此时有正负。转双精度的CT值。
gm=255;
c=60;
w=100;
Gv=0.*(Hu<c-w/2)+(gm/w)*(Hu+(w/2)-c).*(c-w/2<=Hu&Hu<=c+w/2)+gm.*(Hu>c+w/2);%Gv为显示灰度。
figure
imshow(uint8(Gv));
title('加窗')
%% 一次CTRL+T
%% 拉普拉斯高斯滤波 (有库函数) %这个是整体区域。
img_gray=uint8(Gv);
hsize=10;%滤波模板大小。自己可以修改
sigma=0.4; %滤波系数sigma 自己修改会得到不同的效果图
h = fspecial('log', hsize, sigma); %构造拉普拉斯_高斯滤波器,'log'是这个滤波器的标志
img_filter0=double(imfilter(Hu0, h)); %调用matlab中的imfilter函数 ,进行滤波。其中img_gray为要过滤的图像,h为滤波器。
figure
img_filter=uint8(img_filter0);
imshow((img_filter));%显示图像
title('拉普拉斯高斯滤波')
%%
%% 自作ROI区域 利用ginput函数标出点,然后包围所标区域。%%对滤波变换后进行抠图
figure
imshow(img_filter);%%此处为img_filter 就是对滤波后抠图,此处为img_gray就是对为滤波的灰度图进行抠图。
title('加窗图抠图')
hold on
x=[];y=[];
n=0;
while(1)
[xtemp,ytemp,button]=ginput(1);
plot(xtemp,ytemp,'r*');
x=[x xtemp];
y=[y ytemp];
n=n+1;
% text(xtemp+0.1,ytemp,int2str(n));
if(button==32) %button=32表示 当你点点完了。你就按空格,退出点点的状态。
break
end
end
line(x,y);%x y连线
% hold off
t=1:n;
tt=1:0.1:n;
xx=spline(t,x,tt); %因为手点 点数不够多,不够精确,需要插值 spline为插值函数
yy=spline(t,y,tt);
plot(xx,yy,'b:');
BW = roipoly(img_filter,xx,yy); %roipoly为抠图函数。以img_filiter为基础。xx yy为轮廓。包围的区域扣出来
figure, imshow(BW) %返回的是一个二值图像BW。就是一张黑白图。扣除的地方为1.其他地方均为0;
title('轮廓图')
%% 下面返回 被扣的地方的图像。 就是图上只有被扣除的东西
figure
img_last=BW.*(double(img_filter));%原理是这样:BW为 1 0的二值图,被扣的地方是兴趣区域都是1.这时
%与原图像进行.* ,除了为1的地方返回灰度值*1,其他地方都返回灰度值*0。
img_last1=uint8(img_last);%转为uint8格式。不然显示不了
img_last1(img_last1==0)=NaN;% 调整背景。
% figure
subplot(221)
imshow(img_last1)%显示最后的图像
title('轮廓返回图')
%%
%你需要的兴趣区域的数据如下: 。它的特点就是 兴趣区域为原图的CT值,非兴趣区域全是0;matlab图像是矩阵。所以必须是规则的。
%所以 要有0 来填充。
final_CT=BW.*(Hu);%%你要是要用 最后的抠图的CT值。这个就是。
%%论文中 有这么一句话:the mean gray-level intensity (m) and uniformity (u)
%%指的是平均灰度强度和均一性。实质求的是ROI区域的灰度值,和灰度值的均一性;
%% l是灰度值, p(l)是l灰度值出现的概率。
%% 先给图像加窗 转为灰度值Gv——>拉普拉斯高斯滤波——>抠图——>求抠图地方的灰度平均值m、均一性值n
%% 那个gui是演示用的。是在没滤波的基础上进行的抠图。没有关系。因为数据在这产生。
%% img_last1 的最后数据。就是 抠出得图。周围用 0填充的。所以周围为黑色。
[p,q]=size(img_last1);
RGB=zeros(p,q);
img_B=cat(3,RGB,RGB,img_last1);%实质就是讲RGB R=0,G=0,B=灰度值。下面类似。
subplot(222)
imshow(img_B);
title('B')
img_G=cat(3,RGB,img_last1,RGB);
subplot(223)
imshow(img_G);
title('G')
img_R=cat(3,img_last1,RGB,RGB);
subplot(224)
imshow(img_R);
title('R')
%% ROI 区域均值求取。 img_mean;
img_sum=sum(img_last1(:));%求出所有元素总和。填充区域为0 。不影响。
N=numel(find(BW==1));%BW中有1的地方 就是有灰度的地方。所以BW中1 的多少,就是灰度的总数。
img_mean=img_sum/N;
大致的结果图如下:
Matlab 高斯_拉普拉斯滤波器处理医学图像的更多相关文章
- MATLAB高斯混合数据的生成
MATLAB高斯混合数据的生成 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 高斯混合模型的基本原理:聚类——GMM,MATLAB中GMM聚类算法:M ...
- matlab函数_连通区域
1. matlab函数bwareaopen──删除小面积对象格式:BW2 = bwareaopen(BW,P,conn)作用:删除二值图像BW中面积小于P的对象,默认情况下使用8邻域.算法:(1)De ...
- matlab初学者_脚本文件调用函数文件
问题: matlab里面有两种文件,一种是脚本文件,一种是函数文件,为了模块化程序,我们需要把专门的功能写成一个函数封装到某个函数文件里面. 那么来看如何在脚本文件里调用函数文件中的函数. 注意点: ...
- 【转】matlab函数_连通区域
转载自einyboy的博文Matlab的regionprops详解 1. matlab函数bwareaopen──删除小面积对象格式:BW2 = bwareaopen(BW,P,conn)作用:删除二 ...
- matlab中实现Gabor滤波器
1.spatialgabor.m描述gabor函数 % SPATIALGABOR - applies single oriented gabor filter to an image%% Usage: ...
- matlab高斯模板生成,K是归一化系数,上面是一个半径200的高斯模板用来做MSR
R3=; F=zeros(*R3+,*R3+); sigma=R3/; r=; :*R3+ :*R3+ r=(x-R3)*(x-R3)+(y-R3)*(y-R3); ...
- SSE图像算法优化系列二十八:深度优化局部拉普拉斯金字塔滤波器。
基于局部拉普拉斯金字塔的Edge-aware滤波器是在2011年由Adobe 公司的研究员Sylvain Paris(大神级人物,写了很多文章)提出的,我在4年前曾经参考有关代码实现过这个算法,但是速 ...
- IIR滤波器软件实现(Matlab+C++)
使用C++来写一个IIR滤波器 我们首先要在MATLAB中设计一个IIR滤波器,并生成一个头文件,这个头文件中反映了IIR滤波器的频率响应特性 理论支持 IIR滤波叫做递归滤波器,它是一种具有反馈的滤 ...
- MATLAB用“fitgmdist”函数拟合高斯混合模型(一维数据)
MATLAB用“fitgmdist”函数拟合高斯混合模型(一维数据) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在MATLAB中“fitgmdis ...
随机推荐
- RecyclerView使用大全
RecylerView介绍 RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字recyler ...
- 前端网络、JavaScript优化以及开发小技巧
一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...
- .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...
- angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用
今天我们要讲的是ng2的路由系统. 例子
- mybatis_个人总结
在使用mybatis框架开发数据访问层的过程中,我在这段时间遇到很多细节问题困住我,在这里我来分享一下我遇到的坑,希望能帮到大家. 一.mybatis动态代理方式开发的规范: 1.注意在mybatis ...
- MySQL主从环境下存储过程,函数,触发器,事件的复制情况
下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...
- linux拷贝命令,移动命令
http://blog.sina.com.cn/s/blog_7479f7990101089d.html
- Android—万能ListView适配器
ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...
- JQuery阻止事件冒泡
冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件. 我们在平时的开发过程中,肯定会遇到在一个div(这个div可以是元素)包裹一个div的情况,但是呢,在这两个div上都添加了事件,如果点 ...
- 记录在Windows上安装和使用Oracle数据库过程中的坑
1.安装Oracle Oracle软件是免费的,可以去官网下载相应的安装包.但是如果用于商业用途需要购买License.官网上针对各种平台,32位和64位都有,如果在Windows一般会下载到两个文件 ...