MATLAB 图像归一化

matlab图像处理为什么要归一化和如何归一化
一、为什么归一化
1.
    基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响。也就是转换成唯一的标准形式以抵抗仿射变换
  图像归一化使得图像可以抵抗几何变换的攻击,它能够找出图像中的那些不变量,从而得知这些图像原本就是一样的或者一个系列的。
  因为我们这次的图片有好多都是一个系列的,所以老师把这个也作为我研究的一个方向。
  我们主要要通过归一化减小医学图片由于光线不均匀造成的干扰。
2.matlab里图像数据有时候必须是浮点型才能处理,而图像数据本身是0-255的UNIT型数据所以需要归一化,转换到0-1之间。
3.归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。 目的是为了:
(1).避免具有不同物理意义和量纲的输入变量不能平等使用 
(2).bp中常采用sigmoid函数作为转移函数,归一化能够防止净输入绝对值过大引起的神经元输出饱和现象 
(3).保证输出数据中数值小的不被吞食 
3.神经网络中归一化的原因
        归一化是为了加快训练网络的收敛性,可以不进行归一化处理 
        归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布。归一化有同一、统一和合一的意思。无论是为了建模还是为了计算,首先基本度量单位要同一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测的,归一化是同一在0-1之间的统计概率分布; 当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。为了避免出现这种情况,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于0或与其均方差相比很小。
        归一化是因为sigmoid函数的取值是0到1之间的,网络最后一个节点的输出也是如此,所以经常要对样本的输出归一化处理。所以这样做分类的问题时用[0.9 0.1 0.1]就要比用[1 0 0]要好。
但是归一化处理并不总是合适的,根据输出值的分布情况,标准化等其它统计变换方法有时可能更好。

二、如何归一化
matlab中的归一化处理有三种方法
1. premnmx、postmnmx、tramnmx
2. restd、poststd、trastd
3. 自己编程
(1)线性函数转换,表达式如下:
y=(x-MinValue)/(MaxValue-MinValue)
说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。
(2)对数函数转换,表达式如下:
y=log10(x)
说明:以10为底的对数函数转换。
(3)反余切函数转换,表达式如下:
y=atan(x)*2/PI
(4)一个归一化代码.
I=double(I);
maxvalue=max(max(I)‘);%max在把矩阵每列的最大值找到,并组成一个单行的数组,转置一下就会行转换为列,再max就求一个最大的值,如果不转置,只能求出每列的最大值。
f = 1 - I/maxvalue; %为什么要用1去减?
Image1=f;

机器学习模型需要对数据进行归一化

1)归一化后加快了梯度下降求最优解的速度;2)归一化有可能提高精度

1 归一化为什么能提高梯度下降法求解最优解的速度?

如下图所示,蓝色的圈圈图代表的是两个特征的等高线。其中左图两个特征X1和X2的区间相差非常大,X1区间是[0,2000],X2区间是[1,5],其所形成的等高线非常尖。当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;

而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,在梯度下降进行求解时能较快的收敛。

因此如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。

2 归一化有可能提高精度

一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

3 归一化的类型

1)线性归一化

这种归一化方法比较适用在数值比较集中的情况。这种方法有个缺陷,如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。实际使用中可以用经验常量值来替代max和min。

2)标准差标准化

  经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:

  其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

3)非线性归一化

经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。需要根据数据分布的情况,决定非线性函数的曲线,比如log(V, 2)还是log(V, 10)等。

时间: 2024-10-10 10:07:09

MATLAB 图像归一化的相关文章

python 图像归一化作业代码代编程代写图python作业

python 图像归一化作业代码代编程代写图python作业from PIL import Image import os import sys import numpy as np import time from sklearn import svm # 获取指定路径下的所有 .png 文件 def get_file_list(path): return [os.path.join(path, f) for f in os.listdir(path) if f.endswith(".png&

Matlab图像彩色转灰色

时间:2014年5月7日星期三 网上找的程序,实现图像彩色转灰色: I1=imread('C:\Users\Yano\Desktop\matlab\test1\4.jpg'); I2=rgb2gray(I1); figure(1) imshow(I1); title('源图像'); figure(2) imshow(I2); title('灰度图像'); 自己拍的几张图片,通过此程序转换成功: Matlab图像彩色转灰色

matlab 图像和 opencv 图像的相互转换

matlab可以生成C++代码, 但是在涉及图像数据的时候,要注意数据格式的转换. p { margin-bottom: 0.1in; line-height: 120% } a:link { } 1. Matlab图像数据在内存中的存放顺序是R通道图,G通道图,B通道图.对于每个通道,数据存放是先列后行. 2. C++中,opencv Mat对象的数据存放顺序是先行后列,对于每个像素点,分别有r,g,b三个值. 3 . Opencv Mat 转matlab格式数据 对于opencv Mat图像

关于神经网络(matlab)归一化的整理

关于神经网络归一化方法的整理由于采集的各数据单位不一致,因而须对数据进行[-1,1]归一化处理,归一化方法主要有如下几种,供大家参 考:(by james)1.线性函数转换,表达式如下:y=(x-MinValue)/(MaxValue-MinValue)说明:x.y分别为转换前.后的值,MaxValue.MinValue分别为样本的最大值和最小值.2.对数函数转换,表达式如下:y=log10(x)说明:以10为底的对数函数转换.3.反余切函数转换,表达式如下:y=atan(x)*2/PI归一化是

matlab 图像的基本操作

(1)显示: image()可以直接显示8位数图像,但8位图像和double型数据在image()中意义是不一样的. 二值图可用uint8或double来储存: 索引图像uint8和double型显示方法没区别.但8位数据矩阵的值和颜色种类之间有一个数值为1的偏差.调用格式  image(x); colormap(map); 对于灰度图像,uint8范围0~255,double范围0~1,二者转换方式: i8 = uint(round(i64*255));   i64 = double(i8)/

matlab图像基础知识

1.MATLAB支持的几种图像文件格式: ⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式. ⑵BMP(Windows Bitmap):有1位.4位.8位.24位非压缩图像,8位RLE(Run length Encoded)的图像.文件内容包括文件头(一个BITMAP FILEHEADER数据结构).位图信息数据块(位图信息头BITMAP INFOHEADER和一个颜色表)和图像数据. ⑶PCX(Windows Paintbru

图像归一化

相关论文的英文:http://download.csdn.net/detail/zhouyelihua/7832193 计算机视觉图像归哪个.理的.由于图像的归一化保持了仿射不变性.并且图像的归一化有时候可以提高计算的精度. 所以图像的归一化对于我们来说非常重要. 而图像的归一化的详细过程主要是: 1.坐标中心化 2.x-shearing 归一化. 3.缩放归一化 4.旋转归一化 而在上述其中的四步骤事实上就是针对仿射变化而进行的. 由于一个仿射变化能够化为位移变化 切向变化 缩放变化 旋转变化

matlab 数据归一化

图像数据归一化 depth为源图像,数据分布在[0 63],归一化到[0 255] xmin = min(min(depth));xmax = max(max(depth));ymin = 0;ymax = 255;depth1 = (ymax-ymin)*(depth-ones(m,n) * xmin)/(xmax-xmin) + ones(m,n)*ymin;figure;imshow(uint8(depth1));

Matlab 图像平移、旋转、缩放、镜像

今天学习了用Matlab实现对图像的基本操作.在Matlab中,图像是按照二维矩阵的形式表示的.所以对图像的操作就是对矩阵的操作. 对图像进行缩放.平移.旋转,都可以转化为矩阵的运算. 关于变换矩阵的构造,请参考: < [gym 101047C Robotics Competition] 矩阵快速幂求解点旋转平移N次之后的位置> 参考原图:  1. 图像平移 init = imread('Fig3.tif'); % 读取图像 [R, C] = size(init); % 获取图像大小 res