谁知道ENVI里面图像增强中(Enhance)高斯增强是什么原理,文档或者链接都行啊

谁知道ENVI里面图像增强中(Enhance)高斯增强是什么原理,文档或者链接都行啊,第1张

高斯滤波(高斯平滑)是图像处理,计算机视觉里面最常见的操作。平时,我们都是用matlab或者opencv的函数调用:imfilter或者cvSmooth,并不关心底层的实现。然而当开发者要实做高斯滤波的时候,往往就会很迷惘,往往会被以下几个问题困扰:

给定sigma,即标准偏差,怎么确定离散化后滤波器的窗口大小?

给定窗口大小,怎么计算高斯核的sigma,即标准方差?

怎么实现可分离滤波器?

我在google上搜了一下,还真没几个人把实现的细节讲清楚了。这里,我尝试结合三份源码,做个小小的总结。

三份源码分别是:

opencv中的cvfiltercpp

autopano-sift-c中的GaussianConvolutionc

GIMP中的blur-gaussc和unsharp-maskc

在图像处理中,高斯滤波一般有两种实现方式,一是用离散化窗口滑窗卷积,另一种通过傅里叶变换。最常见的就是第一种滑窗实现,只有当离散化的窗口非常大,用滑窗计算量非常大(即使用可分离滤波器的实现)的情况下,可能会考虑基于傅里叶变化的实现方法。这里我们只讨论第一种方法。

二维高斯函数的形式是这样的:

f(x,y) = A e^{- \left(\frac{(x-x_o)^2}{2\sigma_x^2} + \frac{(y-y_o)^2}{2\sigma_y^2} \right)}

有着如下的形状,形状很激凸,怎么会叫高斯平滑呢,分明是高斯激凸嘛:

基本上,离散化的主旨就是保留高斯函数中心能量最集中的中间部分,忽略四周能量很小的平坦区域。这只是个很感性的描述,具体实现起来,就会出现千奇百怪的版本。下面结合三份源码,看看现实世界里的高斯平滑到底长的什么样子。

首先是第一个问题:给定sigma,怎么计算窗口大小?

直接上opencv的源码,在cvFilter函数中:

param1 = cvRound(sigma1(depth == CV_8U 3 : 4)2 + 1)|1;

opencv认为半径为3sigma的窗口就是高斯函数能量最集中的区域。(为什么在图像深度不是8U的时候,使用4sigma半径的窗口就不得而知了,有高人指点一下?)

autopan0-sift-c是图像拼接软件hugin里面的sift实现,在实现DoG的时候需要做不同尺度的高斯平滑,实现如下,在GaussianConvolution_new1函数中:

dim = 1 + 2 ((int) (30 sigma));

可见autopano也是实现的3sigma半径的窗口。

在GIMP里,实现比较奇特,在blur_gaussc的make_rle_curve函数里面,

const gdouble sigma2 = 2 sigma sigma;

const gdouble l = sqrt (-sigma2 log (10 / 2550));

int n = ceil (l) 2;

if ((n % 2) == 0)

n += 1;

我是没看懂那个 log (10 / 2550)是干嘛的。。。惭愧。效果来看,这个实现的窗口半径是约等于22sigma。

然后是第二个问题:给定窗口大小,怎么计算sigma?

opencv的实现,在cvFiltercpp的init_gaussian_kernel函数中:

sigmaX = sigma > 0 sigma : (n/2 – 1)03 + 08;

再次不可解。。。乘以03还可以接受,加上08是为嘛啊?

autopano没有实现这个特性。

GIMP的实现:

/ we want to generate a matrix that goes out a certain radius

from the center, so we have to go out ceil(rad-05) pixels,

inlcuding the center pixel Of course, that’s only in one direction,

so we have to go the same amount in the other direction, but not count

the center pixel again So we double the previous result and subtract

one

The radius parameter that is passed to this function is used as

the standard deviation, and the radius of effect is the

standard deviation 2 It’s a little confusing

/

radius = fabs (radius) + 10;

std_dev = radius;

radius = std_dev 2;

/ go out ‘radius’ in each direction /

matrix_length = 2 ceil (radius – 05) + 1;

注释讲的很清楚了,基本上就是认为sigma应该等于窗口半径的一半。

看完这三分源码,结论就是,关于sigma和半径,你爱怎么算就怎么算吧,差不多就行。。。(额。。费了半天劲,就得到这么一句废话啊)。

第三个问题是可分离滤波器:

由于高斯函数可以写成可分离的形式,因此可以采用可分离滤波器实现来加速。所谓的可分离滤波器,就是可以把多维的卷积化成多个一维卷积。具体到二维的高斯滤波,就是指先对行做一维卷积,再对列做一维卷积。这样就可以将计算复杂度从O(MMNN)降到O(2MMN),M,N分别是图像和滤波器的窗口大小。问题是实现时候怎么计算一维的卷积核呢?

其实很简单,按照前面计算出来的窗口大小,计算所有离散点上一维高斯函数的权值,最后别忘了将权值之和归一化到1

有码有真相,来自opencv:

for( i = 0; i <= n/2; i++ )

{

double t = fixed_kernel (double)fixed_kernel[i] : exp(scale2Xii);

if( type == CV_32FC1 )

{

cf[(n/2+i)step] = (float)t;

sum += cf[(n/2+i)step]2;

}

else

{

cd[(n/2+i)step] = t;

sum += cd[(n/2+i)step]2;

}

}

sum = 1/sum;

for( i = 0; i <= n/2; i++ )

{

if( type == CV_32FC1 )

cf[(n/2+i)step] = cf[(n/2-i)step] = (float)(cf[(n/2+i)step]sum);

else

cd[(n/2+i)step] = cd[(n/2-i)step] = cd[(n/2+i)step]sum;

}

一.添加北京54坐标

通过修改ENVI相应的系统文档,可以将北京54坐标系添加进ENVI软件系统,具体方法和步骤如下:

1、找到ENVI安装目录下相应的坐标系存储文档,如“C:\RSI\IDL63\products\envi43\map_proj\datumtxt”,并打开。

2、将以下描述语句添加在文档最后一行:“Beijing-54, Krassovsky, -12, -113, -41”,其中“Beijing-54”是新坐标的名称; “Krassovsky”是它所使用的椭球体名称;“-12, -113, -41”是新坐标系与WGS-84坐标系的坐标差。

3、将修改后的文档保存,关闭。

4、重新启动ENVI。新的坐标系添加成功。

二、自定义高斯-克吕格(Kauss Kruger)投影

具体方法和步骤如下:

1.选择 Map Customize Map Projection,或在任何地图投影选择对话框中,点击“New”按钮 。

2、当出现 Customized Map Projection Definition 对话框时,假设为定义高斯投影的13带,13带的中央经度为75度,具体设置参数如下(上图所示):

Projection name :GK Zone 13(Beijing-54)

Projection Type:Transverse Mercator

Projection Datum:Beijing-54

False easting:500000

False northing:0

Latitude of projection origin: 0

Longitude of central meridian: 75

Scale factor:1

3.选择 Projection Add New Projection将投影添加到 ENVI 所用的投影列表中。

4.存储新的或更改过的投影信息,选择 File Save Projections。选择 File Cancel 退出该功能。

三、地图投影转换

使用 Convert Map Projection 选项可以将经过地理坐标定位的文件转换成其他投影,该转换通过将文件纠正到其他的投影来完成。

1、 选择 Map Convert Map Projection。选择所需输入文件,点击“OK”。将出现Convert Map Projection Parameters 对话框。三、地图投影转换

使用 Convert Map Projection 选项可以将经过地理坐标定位的文件转换成其他投影,该转换通过将文件纠正到其他的投影来完成。

1、 选择 Map Convert Map Projection。选择所需输入文件,点击“OK”。将出现Convert Map Projection Parameters 对话框。

2、点击Chang Proj…切换按纽,在“ Projection Select”列表中,通过点击需要转换的投影类型GK Zone 13(Beijing-54)。OK

选择File->Open,选择_MTLtxt文件打开。

ENVI自动显示RGB显示真彩色图像,打开DataManager对话框,可以看到ENVI自动读取元数据信息,包括中心波长信息、波段名称等。

欢迎分享,转载请注明来源:品搜搜测评网

原文地址:https://pinsoso.cn/meirong/1786594.html

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

随机推荐

  • 伊思蜗牛BB霜怎么样

    伊思蜗牛BB霜分为晶钻BB霜和红参BB霜两种,两者的功效有些许差别。还不了解伊思蜗牛BB霜怎么样的朋友,快来跟着好物君看看吧。伊思蜗牛BB霜怎么样伊思蜗牛BB霜的晶钻款具有滋润保湿、提亮透白、遮瑕嫩肤以及防晒修颜的功效。伊思蜗牛BB霜的红参

    2024-04-15
    58300
  • 精华霜和精华露的顺序

    对于精华霜和精华露来说,二者的功效大致相同。最大的区别是精华霜的质地要比精华露的质地更加黏稠,在使用的时候要先使用精华露,然后在使用精华霜。因为精华露的质地比较轻薄,在前面使用更容易被肌肤所吸收。如果肌肤状态比较稳定的话,最好不要使用过多的

    2024-04-15
    65400
  • 美白补水精华液排行榜前?

    希思黎抗皱修活精华希思黎这款精华液中蕴含大量的活性物质,再结合植物配方的效果,可以更全面的缓解肌肤干燥缺水的状况,细腻水润的质地也能增强肌肤的吸收能力,让肤质呈现出自然的水润感。珍漾水光精华最值得入手的一款,必买推荐!得过好几次护肤金奖,

    2024-04-15
    61600
  • 护肤品里精华水和精华凝露有什么区别

    精华凝露:适用于中性肤质,比精华液稍浓,水、油成分比例适中。精华露用于皮肤的修护和保养,一般用于睡前洁面后轻拍于面部至吸收,其功能和效果长期使用才会有效果。凝露常富含矿物质和微量元素,能舒缓,抗过敏,浅层消除痘印,长痘肌肤也最适合清爽的凝露

    2024-04-15
    52600
  • 医美之后用什么护肤品?医美品牌护肤品有哪些好用?

    医美之后,一般建议使用含有抗炎、抗过敏成分的护肤品,以减轻皮肤炎症反应和过敏症状。以下是一些医美品牌护肤品,它们在抗炎、抗过敏方面表现良好: 绽媄娅水乳:由第四军医大学研发,适合痘肌、敏感肌、激素脸的水乳,不仅修复屏障还添加了抗炎抗过敏成分

    2024-04-15
    46500
  • 飞机化妆品能单独托运吗 飞机化妆品能单独托运吗吗

    1、飞机化妆品能单独托运;2、托运对于化妆品并没有过于严格的要求,只要将化妆品重量控制在规定的数值内即可放心托运。另外易燃易爆的啫喱或发胶等类型的洗护用品不能托运,所以坐飞机外出不要携带这类化妆品。3

    2024-04-15
    48400
  • 请问一下护肤品的使用顺序,我有洁面乳,爽肤水,益纳其尔的芦荟胶膏,黄瓜精华,SK-ii的洁面乳

    护肤品的使用顺序如下:1 洁面:这是第一步,也是非常重要的一步。使用适合自己肤质的洁面产品,彻底清洁面部。2 爽肤水:使用爽肤水可以起到二次清洁和收缩毛孔的作用。将爽肤水倒在化妆棉上,轻轻擦拭肌肤。3 芦荟胶:芦荟胶可以放在晚上使用,能够深

    2024-04-15
    37100

发表评论

登录后才能评论
保存