2016-07-03 10:22:12 u012363005 阅读数 5338
  • 全新 PowerDesigner 16.6 数据库设计与建模(精讲版)

    PowerDesigner数据库设计与建模,本课程讲述了如何使用PowerDesigner进行数据库分析与建模。包括企业架构及业务流程分析,实体关系模型设计,面向对象和数据库建模的集成等功能模块进行项目需求分析、结构规划、生成框架代码,以及如何从现有系统逆向转工程代码,生成所需系统模型的全过程。软件设计师专题课程的第一篇<<软件设计与建模>>请参看https://edu.csdn.net/course/detail/24752。本课程作者联络QQ:494657271

    11357 人正在学习 去看看 言文
 三天的比赛结束了。今年的题比较变态,我已经被虐到无力吐槽了。。不过真是不到最后逼自己一把成不了事。最后一天突破了好多的困难。在最后的一小时里写完了论文,完成了全部的任务。

    一开始报选修课的时候选matlab的原因是想学一下matlab的图像处理。然后课上一直讲的是基础。。没想到接触到图像处理是在数学建模的比赛中。。。第二天和第三天啥也没干,就在死抠图像处理程序。最终在第三天晚上完美解决。从第一天搜集的大量文献中总结筛选,最终决定了“原始照片 → 双边滤波处理(去噪)→ 切割分块取均值后重组图像 → Canny算子边缘检测 → 对比”的最佳线路。

双边滤波:

程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
%%%%%%%%图5.6程序%%%%%%%%%
clear all;
close all;
clc;
img=imread('附件3 距2400m处的数字高程图.tif');
% img=mat2gray(img);%2值化
  
%%%%%%%%%%第一个图:显示原始图像%%%%%%%%%%%%
subplot(121);
imshow(img);
title('原始图像','position',[1150,2600]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
%%%%%%%%%%%%%%%%%%%%%双边滤波%%%%%%%%%%%%%%%%%%%%%%%
r=10;        %模板半径
[m n]=size(img);
imgn=zeros(m+2*r+1,n+2*r+1);
imgn(r+1:m+r,r+1:n+r)=img;
imgn(1:r,r+1:n+r)=img(1:r,1:n);                 %扩展上边界
imgn(1:m+r,n+r+1:n+2*r+1)=imgn(1:m+r,n:n+r);    %扩展右边界
imgn(m+r+1:m+2*r+1,r+1:n+2*r+1)=imgn(m:m+r,r+1:n+2*r+1);    %扩展下边界
imgn(1:m+2*r+1,1:r)=imgn(1:m+2*r+1,r+1:2*r);       %扩展左边界
sigma_d=2;
sigma_r=0.1;
[x,y] = meshgrid(-r:r,-r:r);
w1=exp(-(x.^2+y.^2)/(2*sigma_d^2));     %以距离作为自变量高斯滤波器
h=waitbar(0,'图像双边滤波中...');
for i=r+1:m+r
    for j=r+1:n+r       
        w2=exp(-(imgn(i-r:i+r,j-r:j+r)-imgn(i,j)).^2/(2*sigma_r^2)); %以周围和当前像素灰度差值作为自变量的高斯滤波器
        w=w1.*w2;
        s=imgn(i-r:i+r,j-r:j+r).*w;
        imgn(i,j)=sum(sum(s))/sum(sum(w));
    end
    waitbar(i/m);
end
close(h)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
%%%%%%%%%%%%%%第二个图:滤波后图像%%%%%%%%%%%%%%%%%
% figure;
img1=mat2gray(imgn(r+1:m+r,r+1:n+r));
subplot(122);
imshow(img1);
title('双边滤波之后的图像','position',[1160,2600]);
%%%%%%%%%%%%%%%%


Canny算子边缘检测

 

程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
%%%%%%%%%%%%%%%%%图5.7程序%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
clc;
img=imread('附件3 距2400m处的数字高程图.tif');
% img=mat2gray(img);%2值化
  
%%%%%%%%%%%%%%%%%%%%%双边滤波%%%%%%%%%%%%%%%%%%%%%%%
r=10;        %模板半径
[m n]=size(img);
imgn=zeros(m+2*r+1,n+2*r+1);
imgn(r+1:m+r,r+1:n+r)=img;
imgn(1:r,r+1:n+r)=img(1:r,1:n);                 %扩展上边界
imgn(1:m+r,n+r+1:n+2*r+1)=imgn(1:m+r,n:n+r);    %扩展右边界
imgn(m+r+1:m+2*r+1,r+1:n+2*r+1)=imgn(m:m+r,r+1:n+2*r+1);    %扩展下边界
imgn(1:m+2*r+1,1:r)=imgn(1:m+2*r+1,r+1:2*r);       %扩展左边界
sigma_d=2;
sigma_r=0.1;
[x,y] = meshgrid(-r:r,-r:r);
w1=exp(-(x.^2+y.^2)/(2*sigma_d^2));     %以距离作为自变量高斯滤波器
h=waitbar(0,'图像双边滤波中...');
for i=r+1:m+r
    for j=r+1:n+r       
        w2=exp(-(imgn(i-r:i+r,j-r:j+r)-imgn(i,j)).^2/(2*sigma_r^2)); %以周围和当前像素灰度差值作为自变量的高斯滤波器
        w=w1.*w2;
        s=imgn(i-r:i+r,j-r:j+r).*w;
        imgn(i,j)=sum(sum(s))/sum(sum(w));
    end
    waitbar(i/m);
end
close(h)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
%%%%%%%%%%%%%%第二个图:滤波后图像%%%%%%%%%%%%%%%%%
% figure;
img1=mat2gray(imgn(r+1:m+r,r+1:n+r));
subplot(121);
imshow(img1);
title('未Canny处理前的图像','position',[1200,2600])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  
%%第四个图:第二个图滤波后图像的canny边缘检测处理结果%%
% canny边缘检测
h2=waitbar(0,'绘制双边滤波之后的canny图...');
img4 = edge(img1,'canny');  % 调用canny函数
waitbar(3);
subplot(122)
imshow(img4);  % 显示分割后的图像,即梯度图像
title('Canny处理后图像','position',[1200,2600])
close(h2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

由上图可以看出,处理效果并不好。我们进行切割分块取均值后再还原图像的方法处理后再进行Canny算子边缘检测。

图片:

 

程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
%%%%%%%%%%%%%%%%图5.8程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
clc;
img=imread('附件3 距2400m处的数字高程图.tif');
  
  
%%%%%%%%%%%%%%%%%%%%%双边滤波%%%%%%%%%%%%%%%%%%%%%%%
r=10;        %模板半径
[m n]=size(img);
imgn=zeros(m+2*r+1,n+2*r+1);
imgn(r+1:m+r,r+1:n+r)=img;
imgn(1:r,r+1:n+r)=img(1:r,1:n);                 %扩展上边界
imgn(1:m+r,n+r+1:n+2*r+1)=imgn(1:m+r,n:n+r);    %扩展右边界
imgn(m+r+1:m+2*r+1,r+1:n+2*r+1)=imgn(m:m+r,r+1:n+2*r+1);    %扩展下边界
imgn(1:m+2*r+1,1:r)=imgn(1:m+2*r+1,r+1:2*r);       %扩展左边界
sigma_d=2;
sigma_r=0.1;
[x,y] = meshgrid(-r:r,-r:r);
w1=exp(-(x.^2+y.^2)/(2*sigma_d^2));     %以距离作为自变量高斯滤波器
h=waitbar(0,'图像双边滤波中...');
for i=r+1:m+r
    for j=r+1:n+r       
        w2=exp(-(imgn(i-r:i+r,j-r:j+r)-imgn(i,j)).^2/(2*sigma_r^2)); %以周围和当前像素灰度差值作为自变量的高斯滤波器
        w=w1.*w2;
        s=imgn(i-r:i+r,j-r:j+r).*w;
        imgn(i,j)=sum(sum(s))/sum(sum(w));
    end
    waitbar(i/m);
end
close(h)
  
%%%%%%%%%%%%%%第二个图:滤波后图像%%%%%%%%%%%%%%%%%
img1=mat2gray(imgn(r+1:m+r,r+1:n+r));
  
  
%%%%%%%%%%滤波后图像高程值分块单位化并求均值%%%%%%%%%
a=zeros(575);
b=zeros(575);
c=zeros(575);
d=zeros(575);
H=waitbar(0,'滤波后图像高程值分块单位化并求均值...');%粗壁障,采用4*4计算单位。
for i=1:1:575;
    for j=1:1:575;
        a(j,i)=img1(4*j-1,4*i-1);
        b(j,i)=img1(4*j-1,4*i);
        c(j,i)=img1(4*j,4*i-1);
        d(j,i)=img1(4*j,4*i);
        a1=a(j,i);b1=b(j,i);c1=c(j,i);d1=d(j,i);
        img2(j,i)=(a1+b1+c1+d1)/16;% 取平均数之后
    end
    waitbar(i/575);
end
close(H);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  
%%%%第三个图:滤波后图像高程值分块单位化后均值排列图%%%%%%
% figure(1);
% imagesc(img1);
% figure(2);
subplot(121)
imshow(img2);
title('未Canny处理前的图像','position',[287,630])
  
  
  
%%%%%%第五个图:第三个图的canny边缘检测处理结果%%%%%%%
% canny边缘检测
img5 = edge(img2,'canny');  % 调用canny函数
subplot(122);
imshow(img5);  % 显示分割后的图像,即梯度图像
title('Canny处理后图像','position',[287,635])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


 

2017-09-09 12:57:25 qq_34861102 阅读数 936
  • 全新 PowerDesigner 16.6 数据库设计与建模(精讲版)

    PowerDesigner数据库设计与建模,本课程讲述了如何使用PowerDesigner进行数据库分析与建模。包括企业架构及业务流程分析,实体关系模型设计,面向对象和数据库建模的集成等功能模块进行项目需求分析、结构规划、生成框架代码,以及如何从现有系统逆向转工程代码,生成所需系统模型的全过程。软件设计师专题课程的第一篇<<软件设计与建模>>请参看https://edu.csdn.net/course/detail/24752。本课程作者联络QQ:494657271

    11357 人正在学习 去看看 言文

数学建模–数字图像处理–亮度变换与空间滤波

在数学建模竞赛中,还存在一类大的模块就是数字图像处理相关算法的使用以及图像的显示。最近正好也在学数字图像处理这一课程,基于两者利用Matlab编程给出一些示例

原文:
http://blog.csdn.net/qq_34861102/article/details/77914486


亮度变换工具:

g = imadjust(f,[low_in;high_in],[low_out;high_out],gamma)
uiopen('D:\Users\Outlier\Desktop\test.jpg',1)
g = imadjust(test,[0;1],[1;0]);
subplot(1,2,1)
imshow(test)
subplot(1,2,2)
imshow(g)

这里写图片描述


线性空间滤波器:

fspecial('laplacian',a)

实现一个拉普拉算子掩膜

这里写图片描述

uiopen('D:\Users\Outlier\Desktop\test.jpg',1)
h1 = fspecial('laplacian',0);
g1 = test - imfilter(test,h1);   %原图像中减去拉普拉算子处理的结果
h2 = [1 1 1;1 -8 1; 1 1 1];
g2 = test - imfilter(test,h2);
subplot(1,3,1)
imshow(test)
subplot(1,3,2)
imshow(g1)
subplot(1,3,3)
imshow(g2)

非线性空间滤波器:

工具函数:ordfilt2

g = ordilt2(f,m*n,ones(m,n));

这里写图片描述

I = imread('eight.tif');
J = imnoise(I,'salt & pepper',0.02);
K = medfilt2(J);
subplot(1,3,1)
imshow(I)
subplot(1,3,2)
imshow(J)
subplot(1,3,3)
imshow(K)
2019-08-15 22:16:07 qq_34616741 阅读数 563
  • 全新 PowerDesigner 16.6 数据库设计与建模(精讲版)

    PowerDesigner数据库设计与建模,本课程讲述了如何使用PowerDesigner进行数据库分析与建模。包括企业架构及业务流程分析,实体关系模型设计,面向对象和数据库建模的集成等功能模块进行项目需求分析、结构规划、生成框架代码,以及如何从现有系统逆向转工程代码,生成所需系统模型的全过程。软件设计师专题课程的第一篇<<软件设计与建模>>请参看https://edu.csdn.net/course/detail/24752。本课程作者联络QQ:494657271

    11357 人正在学习 去看看 言文

这篇文章说一下怎么分析医学影像图像,并利用统计学和机器学习建模,实现预后等回归学习。这篇文章会不断的修改,因为我也会不断的学习,不断的添加和改正文章中的内容。
医学影像已经是非常火的一个方向了,对于医学图像的处理有很多不同的领域,也有很多不同的方法。随着人工智能的发展,很多的人工智能算法已经在医学图像的处理中取得非常不错的进展。比如说深度学习中,Unet对HE染色和IHC染色图像的细胞核分割,CT或者MR图像的肿瘤分割等。在深度学习没有火起来的时候,对医学影像的处理更多的是基于从图像中提取特征,然后在通过机器学习对特征进行建模,实现分类(预后好坏等)。我下面就从流程上说说如何进行图像数据的评估,如何对图像进行特征提取,如何建模等。
首先是图像的获取。一般的影像图像有,CT,X光,MR等。病理图像(HE,WSI,ICH等)是用显微镜拍的,虽然也可以按照类似的方法来做,但这里不涉及病理图像。我们一般都是用肿瘤的CT或者MR,一个是因为这种预测更有意义:对临床上对肿瘤的治疗很大程度上是根据肿瘤的分级和分期来指定治疗方案的,而且对肿瘤的准确预后也对治疗决策的指定有着非常大的影响。传统的分级分期和预后的方法大多数是根据一些临床检测的指标,比如说各种体内成分的含量,有无转移,有无浸润,肿瘤大小,肿瘤边缘的情况等等等等。这些指标都是比较传统医学的指标,一个是预测不是准确,一个是主观性太强,很依赖医生的经验(比如说有无浸润的判断,肿瘤边缘是否清晰等)。一个是这个工作几乎只有计算机可以做。因为这类影像图像灰度级别差距很小,虽然可以通过窗宽窗位来进行观察,但人眼还是有很大的局限。计算机的辅助还是很有必要的。
所以图像一般都是医学里面对患者的真实数据资料,一个是公开数据库的资料。如今医学影像的研究已经很普及,网上也有很多公开的数据库,很多机构也举行了类似的比赛,想要下载资料的话应该开始比较容易的。
图像拿到以后,我们还需要一点处理。一般来说,我们都会划定我们需要提取体征的区间。也就是我们所说的ROI。我们都看过CT或者MR的图片,我们会发现图片上并不是所有区域都是肿瘤或者不正常的组织,很大一部分是正常的。所以我们就要把病灶圈出来
在这里插入图片描述
类似这样子,把肿瘤区域画出来,我们把绿色的线叫做roi。如果是CT这样的的断层扫描图像,那我们就有不同的处理方式。一个是每一张图片都画ROI,然后对所有层的图片进行提取。一种是挑一张具有代表性的层(可以是肿瘤最大的一层),画ROI。ROI的储存形式有很多种,不懂的格式有不同的存储方式。ROI一般都是医生画的,公开的数据库里面很多都会带有ROI。如果不对图像进行画ROI,直接进行处理这种方式现在几乎不会做这么做了,我个人也认为不画ROI是非常不可取的,因为提取的时候涉及了太多的非肿瘤区域,得出的结果也不可信。
接着我们就是对图像进行特征提取。特征有很多种,有我们一般的形态特征(就是肿瘤的大小等),一阶灰度特征(灰度直方图等),灰度共生矩阵等,小波特征等。这些特征总得加起来数量也会非常可观。形态特征可以提取10多到几十个,一阶特征也可以有很多个,小波各种参数加起来可以几百到上万个。
在特征方面,其实也有挺多问题的,比如说图像本身就有很多不同。不同机型,不同参数拍出来的图片其实是有很大的区别的,如果我们不做标准化,我们收集到的图像本来就不在一个维度,所以这个就会造成很多的差异,但这个好像并没有很好的解决方法。现在报道的好像没有很统一好用的标准化方法。
特征提取出来后,一般是要进行ICC检验的。(具体可以维基百科查一下,或者看我的另一篇博文)
ICC后选出ICC值较高的特征(一般都要大于0.75,大于0.9最好),我们就要进行降维了。降维的方法和建模方法一样,多的数不清。我们可以用统计学的方式,比如说我们可以算每个特征的KM曲线,选取相关性高的特征。也可以做C-index。同时,我们也可以用机器学习的方法降维,降维方法也有很多种,比如常用的lasso,岭回归,MRMR等等。一般特征数量不超过样本数的10%。比如说有200个样本,那么特征数就不要超过20个。在建模完成后也可以用AIC评估模型。一般是在能取得好的回归效果的前提下,特征数越少越好,多了会过拟合。
在选取了特征后,一般都要进行特征的归一化,这样子可以均衡特征的权重,不会使得一些特征值很大的特征占据过大的权重,而小值的特征占据过小的权重。
然后就是建模和调参了。模型可以选取很多种,lasso啊,svm啊,cox回归啊之类的。总是就是都试一遍,看看那个效果好。还有就是对模型的调参,这个就不细说。
最后的就是结果的conclusion了。这个是非常重要的。一般的工科生都会在这里吃亏。工科并不注重结果的意义,只是求出来一个好的结果就收工。但是如果是想要发表临床相关的文章,就要对结果进行详尽的分析。分析才是文章的大头。
分析的方法多种多样,评估的方式,图表也是多种多样,这里也不细说,详细的去看看一些相关文献吧。
以后会不定时修改这篇文章。查漏补缺。
欢迎指正。
第一次补充。
这种形式的影像组学已经出现了几年,现在更多的成为临床医生用来发文章的方向。虽然研究很多,但是并没有一套能够在CT图像甚至是单病种的CT图像通用的方法和特征。建模方法简单,临床意义明确,成为了水文章的好方向。现在的影像组学更加需要严格的统计学意义,需要临床意义上的总结分析才能够发文章。

2017-09-22 15:57:57 qq_36139702 阅读数 876
  • 全新 PowerDesigner 16.6 数据库设计与建模(精讲版)

    PowerDesigner数据库设计与建模,本课程讲述了如何使用PowerDesigner进行数据库分析与建模。包括企业架构及业务流程分析,实体关系模型设计,面向对象和数据库建模的集成等功能模块进行项目需求分析、结构规划、生成框架代码,以及如何从现有系统逆向转工程代码,生成所需系统模型的全过程。软件设计师专题课程的第一篇<<软件设计与建模>>请参看https://edu.csdn.net/course/detail/24752。本课程作者联络QQ:494657271

    11357 人正在学习 去看看 言文

plot(a(:,1),a(:,2),'xr'

I = imread('ellipse.BMP');
Ig = rgb2gray(I);
imshow(Ig);
hold on
conicP = ginput(15);
plot(conicP(:,1)', conicP(:,2)', 'xr');     %drawing sample points
a0 = [1 1 1 1 1 1];
f = @(a,x)a(1)*x(:,1).^2+a(2)*x(:,2).^2+a(3)*x(:,1).*x(:,2)+a(4)*x(:,1)+a(5)*x(:,2)+a(6);
p = nlinfit(conicP, zeros(size(conicP, 1), 1), f, a0);
syms x y
conic = p(1)*x^2+p(2)*y^2+p(3)*x*y+p(4)*x+p(5)*y+p(6);
c = ezplot(conic,[0,1152],[0,648]);
set(c, 'Color', 'Green');

代码转载

c(2,1)=[];一般左推,不足为0;
imshow(b)就是直接按b的灰度级画出图
imshow(b,[]),如果[]就是这样,而不是[low,high]那么灰度级最小的将被画成黑色,而最大的灰度级将被画成白色,其他的不变。
如果是[low,high],那么灰度级小于low的将被画成黑色,大于high的将被画成白色,其他的不变。

>> imagesc(pc)
>> colorbar
>> imshow(pc)
>> colorbar
>> imshow(pc,[])
>> figure 
>> imshow(pc)
2017-09-09 15:47:03 qq_34861102 阅读数 477
  • 全新 PowerDesigner 16.6 数据库设计与建模(精讲版)

    PowerDesigner数据库设计与建模,本课程讲述了如何使用PowerDesigner进行数据库分析与建模。包括企业架构及业务流程分析,实体关系模型设计,面向对象和数据库建模的集成等功能模块进行项目需求分析、结构规划、生成框架代码,以及如何从现有系统逆向转工程代码,生成所需系统模型的全过程。软件设计师专题课程的第一篇<<软件设计与建模>>请参看https://edu.csdn.net/course/detail/24752。本课程作者联络QQ:494657271

    11357 人正在学习 去看看 言文

频域变换

为了快速有效地对图像进行处理和分析,常需要将原定义在图像空间的图像以某种形式转换到频域空间,并利用频域空间的特有性质方便地进行一定的加工,最后再转换回图像空间,得到需要的效果。

原文:
http://blog.csdn.net/qq_34861102/article/details/77915672


傅里叶变换

这里写图片描述

uiopen('D:\Users\Outlier\Desktop\test.jpg',1)
cm = rgb2gray(test);%转换为灰度图
[n,m] = size(cm);
cf = fft2(cm);%进行傅里叶变换
cf = fftshift(cf);%进行中心变换
u = [-floor(m/2):floor((m-1)/2)];%水平频率
v = [-floor(n/2):floor((n-1)/2)];%垂直频率
[uu,vv] = meshgrid(u,v);%频率平面的网格节点
b1 = 1./(1+(sqrt(uu.^2+vv.^2)/15).^2);%构造一阶巴特沃滋低通滤波器
cf1 = b1.*cf;%逐点相乘,进行低通滤波
cm1 = real(ifft2(cf1));%进行傅里叶逆变换,并取实部
cm1 = uint8(cm1);%必须进行数据格式转换
subplot(1,2,1)
imshow(cm)
subplot(1,2,2)
imshow(cm1)

离散余弦变换

这里写图片描述

f0 = test;
f1 = double(f0);
for k = 1:3
    g(:,:,k) = dct2(f1(:,:,k));%对R、G、B各个分量分别作离散余弦变换
end
g(abs(g) < 0.1) = 0; %把DCT系数小于0.1的变成0
for k = 1:3
    f2(:,:,k) = idct2(g(:,:,k));%作DCT逆变换
end
f2 = uint8(f2);%把数据转换成uint8格式
subplot(1,2,1)
imshow(f0)
subplot(1,2,2)
imshow(f2)

压缩率为:72.8%

图像/视频背景建模

阅读数 1969

没有更多推荐了,返回首页