谁有深度学习用来图像去噪matlab代码

谁有深度学习用来图像去噪matlab代码,第1张

matlab可以做深度学习,但是从实用性的角度来讲matlab的实现效率相对较低,训练耗时较长。

初次学习计算机语言就选择matlab不是一个明智的选择,最好选用C或者Basic作为入门语言。 matlab是一种傻瓜式的计算机语言,具有强大的函数库,能够方便地进行图像处理、数学计算(包括符号变量组合成的表达式的运算)、仿真等等。

MATLAB是一门计算机编程语言,取名于Matrix Laboratory,本意是专门以矩阵的方式来处理计算机数据,它把数值计算和可视化环境集成到一起,非常直观,而且提供了大量的函数,使其越来越受到人们的喜爱,工具箱越来越多,应用范围也越来越广泛。

首先我想说的是,matlab跟其他语言不一样(我用的比较多的编程语言,除了matlab就

应该是c或c++了,VB和Delphi也接触过,我想版面(matlab版)大部分人也差不多),

如果你抱着“把其他语言的思想运用在matlab里面”的话,那么我想,即使程序运行不

出错,也很难把握matlab的精髓,也就很难发挥matlab的作用了。所以,如果你是希望

掌握一门语言、一个工具,使它更有效为你服务的话,那么,希望本文对你有所帮助,

请精读;如果你是希望matlab作为VC的附属品,即你不想在matlab上面花太多功夫,只

纯粹想用matlab来完成VC做不了或很难做成的任务的话,那么,本文你也应该至少浏览

一下。

Matlab是一个基于矩阵运算的软件,这恐怕是众所周知的事情了,但是,真正在运用的

时候(就是在编程的时候),许多人(特别是初学者)往往没有注意到这个问题,因此

,for循环(包括while循环)满天飞…………这不仅是暴殄天物(没有发挥matlab所

长),还浪费了你宝贵的时间。对此,版友MVH在他的“MATLAB 小技巧”一文中也有所

涉及,雷同的东西我也就不重复了,matlab的“帮助”里面也有相关的指示。我这里想

说的一点是,初学者往往在初始化矩阵的时候注意到这个问题,懂得了使用矩阵而不是

循环来赋值,但是,在其他环节上,就很容易疏忽,或者说,仍然没有摆脱C++的思想

。举个例子吧,下面的代码是我的一个师弟写的,我想他接触matlab也有2、3年时间了

(在此说明一下,接触2、3年并不是表示每天都会跟matlab打交道,我本人也不是,只

是在一年某几个时间段里面连续使用),但是仍然会出现类似的问题:

J = 0;

lt = size(imf1,2);

for (i = 1:lt)

if (abs(imf1(i)) 1)

J = 1;

break

end

end

上面的代码实现了一个目的――检查信号imf1(一个向量)是否存在绝对值大于1的点,

这显然是基于C++的思想写出来的。如果在matlab下面,其实用两个语句就足够了(当

然,可以合并为一个):

q = find(imf11);

J = ~isempty(q);

这样的修改带来的好处是很可观的。

又如:

for j = 1:num

imf1(start1+j) = 2li1(j+1) - imf1(start1+j);

end

这是一个对称翻折的问题,它完全可以用以下这个语句简洁表示:

imf1(start1+1:start1+num) = 2li1(2:num+1) - imf1(start1+1:start1+num);

因此,如果是新手,可以先用循环(基于C++的思想)来编写代码,然后看看能否用ma

tlab的语言(基于矩阵的思想)来改进。当然,这样做的前提是你对matlab提供的一些

函数比较熟悉才行,这些函数在matlab的“帮助”那里搜索“Functions Used in

Vectorizing”就可以找到一些,其他的也可以找相关的书籍(没找到?不可能,电子版

总可以下载到的)

对提高matlab编程能力的方法,我想主要有以下三个:

1 查help

2 多上上论坛,搜索帖子、发帖子问人

3 阅读别人、特别是牛人的程序

当然了,正如所有的程序语言一样,“3分课本7分上机”,一定要动手才行,不能光看

。多想、多思考、多尝试,才是正路。以下技巧就是平日动手编程、阅读别人的帖子后

整理出来的(不断添加中):

1 matlab的运算是基于矩阵的,但是也提供了对应元素的运算,即在运算符前面加上“

点”。例如:

a = [1,2;3,4]

a =

1 2

3 4

b = [-1,-2;-3,0]

b =

-1 -2

-3 0

a b

ans =

-7 -2

-15 -6

a b

ans =

-1 -4

-9 0

其实,这个问题本身并不困难,要点只在于怎样计算贝塞尔函数。

MATLAB提供了计算贝塞尔函数的函数,详情请参见另一个问题的回答。

 

首先,试图使用符号数学工具箱求解析解,代码如下:

syms x y

eq1=(cos(x)-1/3(cos(x))^3)+2(1000+683-22480)/ 

    (3(1000-683))-y(sin(x))^2/0000115-2sin(x) 

    sin(x-0959931)/0000115^2/(98(1000-683)/0071);

eq2=sin(0959931-x)besselk(0,(98(1000-683)/0071)^ 

    050000115sin(x))+(98(1000-683)/0071)^05y 

    besselk(1,(98(1000-683)/0071)^050000115sin(x));

[x,y]=solve(eq1,eq2)

得到的结果为:

x =

72408611253328779611417644360562

y =

-85870621389208280165235516006804e-6

这是因为无法求得解析解,因而调用了数值方法求解得到的结果(注意,在不同MATLAB版本中的处理方式可能存在差别,我使用Maple内核的2008a求解得到上述结果,但使用MuPad内核的2012b则得到复数解)。

 

由于这里求得的x不符合0-pi区间的要求,所以,考虑直接用数值方法求解方程(使用优化工具箱fsolve函数)。代码如下:

function zd

x0 = [pi/2; -1e-5];

options=optimset('Display','iter');

x = fsolve(@eqs, x0, options);

fprintf('x = %6g, y = %6g\n', x);

fprintf('Eq1(x, y) = %6g, Eq1(x, y) = %6g\n', eqs(x));

function f = eqs(X)

x = X(1);

y = X(2);

f(1)=(cos(x)-1/3(cos(x))^3)+2(1000+683-22480)/ 

    (3(1000-683))-y(sin(x))^2/0000115-2sin(x) 

    sin(x-0959931)/0000115^2/(98(1000-683)/0071);

f(2)=sin(0959931-x)besselk(0,(98(1000-683)/0071)^ 

    050000115sin(x))+(98(1000-683)/0071)^05y 

    besselk(1,(98(1000-683)/0071)^050000115sin(x));

得到的结果:

x = 0957676, y = -858706e-007

Eq1(x, y) = -515143e-014, Eq1(x, y) = -138778e-017

我觉得没有太多需要的说明的,所以就不多写了,有问题请追问。

 

另外,我注意到,前面用符号数学工具箱求出的解与使用fsolve得到的结果相差2pi,有兴趣可自行验证。

 

==================================

由于系统抽风,另一个问题的答案“正在提交中”,我把主要内容贴到这里,供参考。

 

MATLAB提供了计算贝塞尔函数的函数,具体包括:

besselj - 第一类贝塞尔函数,或简称贝塞尔函数;

bessely - 第二类贝塞尔函数,又称诺伊曼函数(Neumann function);

besseli - 第一类修正贝塞尔函数;

besselk - 第二类修正贝塞尔函数;

besselh - 第三类贝塞尔函数,又称汉克尔函数(Hankel function)。

 

这几个函数的调用语法基本相同,例如

J = besselj(nu,Z)

J = besselj(nu,Z,1)

[J,ierr] = besselj(nu,Z)

其中,nu为贝塞尔函数的阶数,Z为函数自变量。阶数必须为实数,但Z可以是复数。

 

就你的问题而言,非常简单,K0(x)、K1(x)在MATLAB中的表达式分别为besselk(0,x)、besselk(1,x)。

另外值得一提的是,上述函数是MATLAB基本模块提供的特殊函数(也就是说不需要任何附加工具箱),采用数值方法计算;而符号数学工具箱则提供了第一和第二类的4个贝塞尔函数,名称和调用方式都与基本模块的4个函数完全一致,但支持微分、积分等符号运算。

1 cvx_begin和cvx_end

所有的cvx建模必须以cvx_begin开始以cvx_end结束,所有的变量声明,目标函数和约束必须位于这两者之间,cvx_begin命令可以包含多个修饰词。

cvx_begin quiet 禁止求解过程中的屏幕输出

cvx_begin sdp 调用半正定规划

cvx_begin gp 调用几何规划

修饰词可以组合使用

2 变量

所有的变量必须在使用前以variable(或者variables)命令申明,variable命令包含变量名,可选的纬度列表,一个或者多个关键词提供有关变量内容和结构的额外信息。

variable X                                        %标量

variable Y(20,10)                              %矩阵

variable Z(5,5,5)                               %多维矩阵

variable w(50)complex              %复数向量

variable x(10)nonnegative                 %非负

variable Z(5,5) semidefinite               %半正定(对称正定矩阵)

variable Q(5,5) complexsemidefinite   %厄密共轭矩阵

variable p(10) integer                        %整数变量

variable q binary                               %二进制变量

variable Y(50,50) symmetric              %对称矩阵

variable Z(100,100) hermitiantoeplitz  %厄密共轭常对角矩阵

目前支持的结构关键词还有:

banded(lb,ub)              diagonal        hankel                 hermitian

skew_symmetric   symmetric            toeplitz                tridiagonal

lower_bidiagonal   lower_hessenberg       lower_triangular

upper_bidiagonal upper_hankel        upper_hessenberg       upper_triangular

指定矩阵关键词同样可以用于多维矩阵,此时将定义多个申明的结构

variable R(10,10,8) hermitian semidefinite%定义8个厄密共轭半正定矩阵

variables 可以同时定义多个变量,但是不能定义复数,整数,结构变量:

variables x1 x2 x3 y1(10) y2(10,10,10);

3 目标函数

申明目标函数要求使用minimize或maximize函数,注意调用minimize的目标函数必须是凸的,调用maximize的目标函数必须是凹的。

minimize( norm( x, 1 ) )

maximize( geo_mean( x ) )

如果不指定目标函数,问题将被解释成可行性问题,如果可行性点找到,cvx_optval将设定为0,否则将为+Inf。

4 约束条件

CVX支持下列约束类型

相等==,等式左右两边是仿射表达式

小于<=不等式约束,左边表达式是凸的,右边表达式是凹的。

大于>=约束,左边表达式是凹的,右边表达式是凸的。

可以使用链式不等式:如l <= x <= u

5 函数

许多matlab函数如sum,trace,diag,sqrt,max和min均支持CVX

还有一些CVX新函数,可以在Reference guide里面找到

此外,可以自己定义新函数,见Adding new functions to the atomlibrary

6 设定集合

可以用==或者来设定集合

X==semidefinite(n);

AXA’-X      Bsemidefinite(n)B’;

cvx_begin

variables x(n) y;

minimize( y );

subject to

{ Ax-b, y }  lorentz(m);

cvx_end

8赋值和表达式定义

使用=进行赋值 *** 作

使用ex_pression命令进行定义表达式

variable u(9);

expression x(10);

x(1) = 1;

for k = 1 : 9,

x(k+1) = sqrt( x(k) + u(k) );

end

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12182094.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存