精华内容
下载资源
问答
  • Ps菜单:滤镜/Neural Filters ...Filter/Neural Filters ...◆◆◆皮肤平滑度Skin Smoothing主要用于人像照片调整并移除脸部皮肤...

    Ps菜单:滤镜/Neural Filters ...

    Filter/Neural Filters ...

      ◆  ◆

    皮肤平滑度

    Skin Smoothing

    主要用于人像照片调整并移除脸部皮肤的瑕疵和痘痕。

    3dee030cd67f6af94880b12cf8dee448.png

    • 滤镜选项说明

    选定的脸部

    Selected face

    能够识别合照中的多个脸部,并可以分别选择调整之。

    模糊 

    Blur

    模糊脸部皮肤,减淡皮肤的瑕疵或痘痕。

    平滑度 

    Smoothness

    平滑脸部光影,降低明暗对比。

    说明:

    1、此滤镜仅识别并平滑脸部皮肤,而对脸部之外祼露的皮肤不起作用。

    2、此滤镜可较好地减弱暗斑、雀斑等,但在去除皱纹上却功效甚弱。

    3、应用此滤镜之后,鼻子的轮廓等会变得不清晰,建议通过蒙版恢复。

      ◆  ◆

    超级缩放

    Super Zoom

    可以局部或整体放大图像,并能自动添加细节。

    70e0e936ff69507a78d7bcdc054a634a.png

    • 滤镜选项说明

    输出 

    Output

    根据选项的不同,决定是局部放大还是整体放大。

    --新图层

    New Layer

    选择此项时,仅局部放大图像,可在预览窗格中拖动以重构图像 Drag to reframe image。

    --新文档

    New Document

    选择此项时,将整体放大图像,并创建一个新文档。

    缩放图像 

    Zoom image

    加强图像细节 

    Enhance image details

    移除 JPEG 伪影 

    Remove JPEG artifacts

    降噪 

    Noise reduction

    锐化 

    Sharpen

    加强面部细节 

    Enhance face details

      ◆  ◆

    移除 JPEG 伪影

    JPEG Artifacts Removal

    用于移除压缩 JPEG 产生的伪影。

    8dbded155b8a06d8455ec23caf4787f5.png

    • 滤镜选项说明

    强度 

    Strengh

    移除伪影的强度选择,包括高 High、中 Medium、低 Low等选项。

    3f05e4cb6456edb5766b550c8bd8893b.png

    “有钱的捧个钱场,好看的点下在看”

    展开全文
  • 目的通过平滑处理,我们可以发现数据中的重要模式,同时忽略不重要的内容(如噪声)。我们使用滤波来执行这种平滑处理。平滑处理的目标是呈现值的缓慢变化情况,以便更容易看到数据的趋势。有时,当您检查输入数据时,...

    目的

    通过平滑处理,我们可以发现数据中的重要模式,同时忽略不重要的内容(如噪声)。我们使用滤波来执行这种平滑处理。平滑处理的目标是呈现值的缓慢变化情况,以便更容易看到数据的趋势。

    有时,当您检查输入数据时,您可能希望平滑处理数据以便看到信号的趋势。在我们的示例中,我们有一组 2011 年 1 月洛根机场每小时的摄氏温度读数。

    load bostemp

    days = (1:31*24)/24;

    plot(days, tempC)

    axis tight

    ylabel('Temp (\circC)')

    xlabel('Time elapsed from Jan 1, 2011 (days)')

    title('Logan Airport Dry Bulb Temperature (source: NOAA)')

    ceb9163d45427e90223c64ad1fc5a7a4.png

    请注意,我们可以直观地看到一天中的时间对温度读数的影响。如果您只关注月内的每日温度变化,则每小时的波动只会产生噪声,使得每日的变化很难辨别。为了去除时间的影响,我们现在希望使用移动平均滤波器来平滑处理数据。

    一种移动平均滤波器

    移动平均滤波器的最简单形式是其长度为 N 并且取波形的每 N 个连续采样的平均值。

    为了对每个数据点应用移动平均滤波器,我们构造滤波器的系数,使得每个点的权重相等且占比为总均值的 1/24。这样我们可以得出每 24 小时的平均温度。

    hoursPerDay = 24;

    coeff24hMA = ones(1, hoursPerDay)/hoursPerDay;

    avg24hTempC = filter(coeff24hMA, 1, tempC);

    plot(days,[tempC avg24hTempC])

    legend('Hourly Temp','24 Hour Average (delayed)','location','best')

    ylabel('Temp (\circC)')

    xlabel('Time elapsed from Jan 1, 2011 (days)')

    title('Logan Airport Dry Bulb Temperature (source: NOAA)')

    6ed921e0b4a2a6c4c95b73e71c65c5c4.png

    滤波器延迟

    请注意,滤波后的输出存在大约 12 个小时的延迟。这是因为我们的移动平均滤波器有延迟。

    长度为 N 的任何对称滤波器都存在 (N-1)/2 个采样的延迟。我们可以人为去除这种延迟。

    fDelay = (length(coeff24hMA)-1)/2;

    plot(days,tempC, ...

    days-fDelay/24,avg24hTempC)

    axis tight

    legend('Hourly Temp','24 Hour Average','location','best')

    ylabel('Temp (\circC)')

    xlabel('Time elapsed from Jan 1, 2011 (days)')

    title('Logan Airport Dry Bulb Temperature (source: NOAA)')

    19f75d6c5cd38d4ade26f7d881c752a5.png

    提取平均差异

    我们也可以使用移动平均滤波器来更好地估计一天中的时间如何影响整体温度。为此,首先从每小时的温度测量值中减去平滑处理后的数据。然后,将差异数据按天数分割,取月中所有 31 天的平均值。

    figure

    deltaTempC = tempC - avg24hTempC;

    deltaTempC = reshape(deltaTempC, 24, 31).';

    plot(1:24, mean(deltaTempC))

    axis tight

    title('Mean temperature differential from 24 hour average')

    xlabel('Hour of day (since midnight)')

    ylabel('Temperature difference (\circC)')

    2437ca606d26aabd22828863950f0d66.png

    提取峰值包络

    温度信号的高低每天都有变化,有时我们也希望对这种变化有平滑变动的估计。为此,我们可以使用 envelope 函数来连接在 24 小时内的某个时段检测到的极端高点和极端低点。在此示例中,我们确保在每个极端高点和极端低点之间有至少 16 个小时。我们还可以通过取两个极端点之间的平均值来了解高点和低点的趋势。

    [envHigh, envLow] = envelope(tempC,16,'peak');

    envMean = (envHigh+envLow)/2;

    plot(days,tempC, ...

    days,envHigh, ...

    days,envMean, ...

    days,envLow)

    axis tight

    legend('Hourly Temp','High','Mean','Low','location','best')

    ylabel('Temp (\circC)')

    xlabel('Time elapsed from Jan 1, 2011 (days)')

    title('Logan Airport Dry Bulb Temperature (source: NOAA)')

    2394ad0213102b90e6c6330df768e797.png

    加权移动平均滤波器

    其他类型的移动平均滤波器并不对每个采样进行同等加权。

    另一种常见滤波器遵循 [1/2,1/2]n 的二项式展开。对于大的 n 值,这种类型的滤波器逼近正态曲线。对于小的 n 值,这种滤波器适合滤除高频噪声。要找到二项式滤波器的系数,请对 [1/2,1/2] 进行自身卷积,然后用 [1/2,1/2] 与输出进行指定次数的卷积。在此示例中,总共使用五次迭代。

    h = [1/2 1/2];

    binomialCoeff = conv(h,h);

    for n = 1:4

    binomialCoeff = conv(binomialCoeff,h);

    end

    figure

    fDelay = (length(binomialCoeff)-1)/2;

    binomialMA = filter(binomialCoeff, 1, tempC);

    plot(days,tempC, ...

    days-fDelay/24,binomialMA)

    axis tight

    legend('Hourly Temp','Binomial Weighted Average','location','best')

    ylabel('Temp (\circC)')

    xlabel('Time elapsed from Jan 1, 2011 (days)')

    title('Logan Airport Dry Bulb Temperature (source: NOAA)')

    d92e00067eb907549bb672a37f746161.png

    另一种有点类似高斯展开滤波器的滤波器是指数移动平均滤波器。这种类型的加权移动平均滤波器易于构造,并且不需要大的窗大小。

    您可以通过介于 0 和 1 之间的 alpha 参数来调整指数加权移动平均滤波器。alpha 值越高,平滑度越低。

    alpha = 0.45;

    exponentialMA = filter(alpha, [1 alpha-1], tempC);

    plot(days,tempC, ...

    days-fDelay/24,binomialMA, ...

    days-1/24,exponentialMA)

    axis tight

    legend('Hourly Temp', ...

    'Binomial Weighted Average', ...

    'Exponential Weighted Average','location','best')

    ylabel('Temp (\circC)')

    xlabel('Time elapsed from Jan 1, 2011 (days)')

    title('Logan Airport Dry Bulb Temperature (source: NOAA)')

    4b51fde0b0250960e3ea2e80e7670745.png

    放大一天的读数。

    axis([3 4 -5 2])

    fde669102cc65459ea27bf39d8f20d73.png

    Savitzky-Golay 滤波器

    您会注意到,通过平滑处理数据,极值得到一定程度的削减。

    为了更紧密地跟踪信号,您可以使用加权移动平均滤波器,该滤波器尝试以最小二乘方式对指定数量的采样进行指定阶数的多项式拟合。

    为了方便起见,您可以使用函数 sgolayfilt 来实现 Savitzky-Golay 平滑滤波器。要使用 sgolayfilt,请指定一个奇数长度段的数据和严格小于该段长度的多项式阶。sgolayfilt 函数在内部计算平滑多项式系数,执行延迟对齐,并处理数据记录开始和结束位置的瞬变效应。

    cubicMA = sgolayfilt(tempC, 3, 7);

    quarticMA = sgolayfilt(tempC, 4, 7);

    quinticMA = sgolayfilt(tempC, 5, 9);

    plot(days,[tempC cubicMA quarticMA quinticMA])

    legend('Hourly Temp','Cubic-Weighted MA', 'Quartic-Weighted MA', ...

    'Quintic-Weighted MA','location','southeast')

    ylabel('Temp (\circC)')

    xlabel('Time elapsed from Jan 1, 2011 (days)')

    title('Logan Airport Dry Bulb Temperature (source: NOAA)')

    axis([3 5 -5 2])

    dff42ec57cf352c3dcf3c70916aee15e.png

    重采样

    有时,为了正确应用移动平均值,对信号进行重采样是有益的。

    在下一个示例中,我们对某模拟仪器输入端的开环电压进行采样,其中存在 60 Hz 交流电源线噪声的干扰。我们以 1 kHz 采样率对电压进行了采样。

    load openloop60hertz

    fs = 1000;

    t = (0:numel(openLoopVoltage)-1) / fs;

    plot(t,openLoopVoltage)

    ylabel('Voltage (V)')

    xlabel('Time (s)')

    title('Open-loop Voltage Measurement')

    7993bb233589be52c659400fe575e0f8.png

    现在我们尝试通过使用移动平均滤波器来去除电源线噪声的影响。

    如果您构造一个均匀加权的移动平均滤波器,它将去除相对于滤波器持续时间而言具有周期性的任何分量。

    以 1000 Hz 采样时,在 60 Hz 的完整周期内,大约有 1000 / 60 = 16.667 个采样。我们尝试“向上舍入”并使用一个 17 点滤波器。这将在 1000 Hz / 17 = 58.82 Hz 的基频下为我们提供最大滤波效果。

    plot(t,sgolayfilt(openLoopVoltage,1,17))

    ylabel('Voltage (V)')

    xlabel('Time (s)')

    title('Open-loop Voltage Measurement')

    legend('Moving average filter operating at 58.82 Hz', ...

    'Location','southeast')

    a2683438457aef0ad25bc63e779adc1e.png

    请注意,虽然电压明显经过平滑处理,但它仍然包含小的 60 Hz 波纹。

    如果我们对信号进行重采样,以便通过移动平均滤波器捕获 60 Hz 信号的完整周期,就可以显著减弱该波纹。

    如果我们以 17 * 60 Hz = 1020 Hz 对信号进行重采样,可以使用 17 点移动平均滤波器来去除 60 Hz 的电线噪声。

    fsResamp = 1020;

    vResamp = resample(openLoopVoltage, fsResamp, fs);

    tResamp = (0:numel(vResamp)-1) / fsResamp;

    vAvgResamp = sgolayfilt(vResamp,1,17);

    plot(tResamp,vAvgResamp)

    ylabel('Voltage (V)')

    xlabel('Time (s)')

    title('Open-loop Voltage Measurement')

    legend('Moving average filter operating at 60 Hz', ...

    'Location','southeast')

    f007c442c9bf0c2d8148eb82b291ccff.png

    中位数滤波器

    移动平均滤波器、加权移动平均滤波器和 Savitzky-Golay 滤波器对它们滤波的所有数据进行平滑处理。然而,有时我们并不需要这种处理。例如,如果我们的数据取自时钟信号并且不希望对其中的锐边进行平滑处理,该怎么办?到当前为止讨论的滤波器都不太适用:

    load clockex

    yMovingAverage = conv(x,ones(5,1)/5,'same');

    ySavitzkyGolay = sgolayfilt(x,3,5);

    plot(t,x, ...

    t,yMovingAverage, ...

    t,ySavitzkyGolay)

    legend('original signal','moving average','Savitzky-Golay')

    ef38923070116e9c5e6626fd539a84f5.png

    移动平均滤波器和 Savitzky-Golay 滤波器分别在时钟信号的边沿附近进行欠校正和过校正。

    保留边沿但仍平滑处理水平的一种简单方法是使用中位数滤波器:

    yMedFilt = medfilt1(x,5,'truncate');

    plot(t,x, ...

    t,yMedFilt)

    legend('original signal','median filter')

    b811e43648781622eee5cff129242f92.png

    通过 Hampel 滤波器去除离群值

    许多滤波器对离群值很敏感。与中位数滤波器密切相关的一种滤波器是 Hampel 滤波器。此滤波器有助于在不过度平滑处理数据的情况下去除信号中的离群值。

    为了演示这一点,请加载一段火车鸣笛的录音,并添加一些人为噪声尖峰:

    load train

    y(1:400:end) = 2.1;

    plot(y)

    781822300e234d0f5f21258d6ea5b8b7.png

    由于我们引入的每个尖峰只有一个采样的持续时间,我们可以使用只包含三个元素的中位数滤波器来去除尖峰。

    hold on

    plot(medfilt1(y,3))

    hold off

    legend('original signal','filtered signal')

    8e13c773bd5dc9b5ece9a16c5f005fbf.png

    该滤波器去除了尖峰,但同时去除了原始信号的大量数据点。Hampel 滤波器的工作原理类似于中位数滤波器,但它仅替换与局部中位数值相差几倍标准差的值。

    hampel(y,13)

    legend('location','best')

    4d514f98d34eecbb0569d3058a49f6ca.png

    从原始信号中仅去除了离群值。

    延伸阅读

    有关滤波和重采样的详细信息,请参阅 Signal Processing Toolbox。

    参考资料:Kendall, Maurice G., Alan Stuart, and J. Keith Ord.The Advanced Theory of Statistics, Vol. 3:Design and Analysis, and Time-Series.4th Ed. London:Macmillan, 1983.

    展开全文
  • 使用matplotlib的平滑折线图

    千次阅读 2021-01-28 21:44:23
    我尝试过在Python中平滑折线图的方法,这不难通过插值来实现,例如,使用这些数据集,我可以生成这个图表。在x = np.linspace(0, 6, num=7)、A = [3, 4, 5, 3.5, 4.7, 5, 3.6]和{}虽然我不太喜欢所取得的效果,但...

    我尝试过在Python中平滑折线图的方法,这不难通过插值来实现,例如,使用这些数据集,我可以生成这个图表。在

    x = np.linspace(0, 6, num=7)、A = [3, 4, 5, 3.5, 4.7, 5, 3.6]和{}

    0d59e8157ef19ddc18130f62a86c2d34.png

    虽然我不太喜欢所取得的效果,但原因是,例如在2017-01-22和2017-01-23期间,假设B先下降后上升,我希望这两个连续的点只以递增或递减的方式连接,即B在2017-01-21和2017-01-22范围内平稳增长。在

    或者更精确地说,我希望两个相邻点之间的曲线斜率仅为正、负或零。

    怎样才能达到预期的效果?在

    这是我一直使用的代码def generate_graph():

    x = np.linspace(0, 6, num=7)

    A = [3, 4, 5, 3.5, 4.7, 5, 3.6]

    B = [3.4, 4.2, 4.9, 3.7, 4.7, 4.2, 4.6]

    A_tck = splrep(x, A)

    A_average_tck = splrep(x, B)

    dates = [datetime.date.today() - timedelta(6), datetime.date.today() - timedelta(5), datetime.date.today() - timedelta(4), datetime.date.today() - timedelta(3), datetime.date.today() - timedelta(2), datetime.date.today() - timedelta(1), datetime.date.today()]

    x_new = np.linspace(x.min(), x.max(), 200)

    A_new = splev(x_new, A_tck)

    B_new = splev(x_new, A_average_tck)

    plt.plot(x_new, A_new, label='A')

    plt.plot(x_new, B_new, label='B')

    plt.xticks(x, dates, size='small')

    plt.grid()

    plt.ylabel('Y')

    plt.xlabel('X')

    plt.legend(loc='best')

    plt.savefig('foo.png', bbox_inches='tight')

    展开全文
  • 图像平滑算法

    2021-02-07 09:09:16
    } 灰度差值门限法平滑噪声效果: 可以看出这种方法比单纯使用简单平均法更能保护图像信息 2.3. 加权平均法 当处理图像内部区域的边界点时,由于边界点与周围的反差较大,那么邻域平均法处理后边界点必然会变得模糊...

    1. 噪声

    图像在获取的过程中一般会受到各种干扰而导致图像含有噪声。噪声的产生原因有很多,噪声产生的原因决定了噪声的分布特性。
    当噪声 n ( x , y ) n(x,y) n(x,y)与图像信号 g ( x , y ) g(x,y) g(x,y)无关时,含噪图像 f ( x , y ) f(x,y) f(x,y)可以用下面的式子表示:
    f ( x , y ) = g ( x , y ) + n ( x , y ) f(x,y)=g(x,y)+n(x,y) f(x,y)=g(x,y)+n(x,y)
    这种噪声称作加性噪声。

    还有一种乘性噪声,即噪声和信号有关,含噪图像 f ( x , y ) f(x,y) f(x,y)表示为:
    f ( x , y ) = g ( x , y ) + n ( x , y ) g ( x , y ) = [ 1 + n ( x , y ) ] g ( x , y ) = n 1 ( x , y ) g ( x , y ) f(x,y)=g(x,y)+n(x,y)g(x,y)=[1+n(x,y)]g(x,y)=n_1(x,y)g(x,y) f(x,y)=g(x,y)+n(x,y)g(x,y)=[1+n(x,y)]g(x,y)=n1(x,y)g(x,y)

    对于大多数传感器,与信号一起产生的噪声可以模拟为高斯分布和泊松分布的随机过程。高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。因为后面会用到高斯噪声,这里利用opencv给图像加上高斯噪声。
    利用Box-Muller 算法可以算出一个正态分布的随机数字 Z,具体方法百度如下:在这里插入图片描述
    算出正态分布的随机数字 Z之后,就可以给图像加上高斯噪声了(这里只生成服从标准正态的高斯噪声),算法的关键程序代码如下:

     Mat addNoise::addGaussianNoise(Mat src)
     {
    	 Mat dst = src.clone();
    	 int ncols = dst.cols*dst.channels();
    	 int rows = dst.rows;
    	 for (int i = 0; i < rows; i++) {
    		 for (int j = 0; j < ncols; j++) {
    						 dst.at<uchar>(i, j) =saturate_cast<uchar>(dst.at<uchar>(i,j)+ (uchar)generateGuassianNumber());
    		 }
    	 }
    	 return dst;
     }
    
     double addNoise::generateGuassianNumber()
     {
    	 double u1 = (double)rand() / RAND_MAX;
    	 double u2 =(double) rand() / RAND_MAX;
    	 double R = sqrt(-2 * log(u1));
    	 double theta = 2 * M_PI * u2;
    	 return R*cos(theta);
     }
    
    

    2. 邻域平均法

    邻域平均法在空间域平滑噪声。对于给定NXN个像素的数字图像 [ f ( i , j ) ] [f(i,j)] [f(i,j)]的每个像素点 ( m , n ) (m,n) (m,n),取其邻域S,若S中含有M个像素,以平均值
    在这里插入图片描述
    代替原像素点的灰度值。

    设含噪图像 f f f在像素点 ( i , j ) (i,j) (i,j)为: f ( x , y ) = g ( x , y ) + n ( x , y ) f(x,y)=g(x,y)+n(x,y) f(x,y)=g(x,y)+n(x,y)
    经过邻域平均后的图像为:
    在这里插入图片描述
    若噪声在空间上不相关,其期望为零,方差为 σ 2 \sigma^2 σ2,则处理后噪声期望为零,方差为 σ 2 / M \sigma^2/M σ2/M,可见方差变小了,说明噪声强度减弱了,即抑制了噪声。由上式也可以看出邻域平均法在消弱噪声的同时也平滑了图像,可能导致目标边界变得不清晰。

    2.1. 简单平均法

    设S为3X3邻域,点 ( m , n ) (m,n) (m,n)位于S的中心,则:
    在这里插入图片描述
    对于其他邻域处理与上式类似。
    测试代码如下:

    #include <iostream>
    #include<opencv2/opencv.hpp>
    using namespace cv;
    #include"ImageSmoothing.h"
    #include "addNoise.h"
    int main()
    {
    	Mat src = imread("1.jpg");
    	if (src.empty()) {
    		std::cout << "图片加载失败" << std::endl;
    		return -1
    	}
    	namedWindow("原图", WINDOW_NORMAL);
    	imshow("原图", src);
    	Mat src2 = addNoise::addGaussianNoise(src);
    	namedWindow("加噪图", WINDOW_NORMAL);
    	imshow("加噪图", src2);
    	Mat dst1=ImageSmoothing::simpleAvg(src2,3,3);
    	namedWindow("3x3窗口平滑", WINDOW_NORMAL);
    	imshow("3x3窗口平滑", dst1);
    	Mat dst2 = ImageSmoothing::simpleAvg(src2, 5, 5);
    	namedWindow("5x5窗口平滑", WINDOW_NORMAL);
    	imshow("5x5窗口平滑", dst2);
    
    	waitKey(0);
    	return 1;
    	
    }
    
    

    其中的ImageSmoothing::simpleAvg定义如下:

    Mat ImageSmoothing::simpleAvg(Mat input, int s1 , int s2 )
    {/*
          简单平均法,s1,s2为邻域S大小
          s1,s2只能输入奇数	 
    	  */
    	if (s1 % 2==0 || s2 % 2==0) {
    		std::cout << "参数s1,s2请输入奇数" << std::endl;
    		exit(0);
    	}
    	Mat src = input.clone();
    	/*
    	由于mat的值传递不另开辟实例空间
    	为了处理之后的图像不改变原图像,这里克隆一下
    	*/
    	int rows = src.rows;
    	int cols = src.cols;
    	int channels = src.channels();
    	Mat dst(src.size(), src.type(),Scalar(0));
    	int S = s1 * s2;
    	int i0 = (s1 - 1) / 2;
    	int j0 = (s2 - 1) / 2;
    	for (int m = i0; m < rows - i0; m++) {
    		for (int n =j0*channels; n < (cols - j0 )* channels; n++) {
    			for (int i = -i0; i <= i0; i++) {
    				for (int j = -j0; j <= j0; j++) {
    					dst.at<uchar>(m, n) += (src.at<uchar>(m + i, n + j * channels)/S);
    				}
    			}
    		}
    	 }
    	return dst;
    }
    
    

    测试结果:
    在这里插入图片描述
    由测试结果可见平滑窗口越大,去噪效果越好,但是对图像的伤害也越大。

    2.2. 灰度差值门限法

    由于受噪干扰的像素的灰度和相邻像素差别较大,灰度差值门限法即选取一适当的门限,当某个像素点的灰度与邻域平均值之差大于这个门限T时,就令这一点的像素等于灰度平均值,否则为原灰度。公式如下:
    在这里插入图片描述
    这种方法可以把较大的噪声滤除,而对信号影响不大。
    算法的关键程序代码如下:

    	static Mat grayDT(Mat input, int s1=3, int s2=3,uchar T=50);
    
    
    Mat ImageSmoothing::grayDT(Mat input, int s1, int s2, uchar T)
    {//灰度差值门限法
    
    		if (s1 % 2 == 0 || s2 % 2 == 0) {
    			std::cout << "参数s1,s2请输入奇数" << std::endl;
    			exit(0);
    		}
    	Mat src = input.clone();
    	int rows = src.rows;
    	int cols = src.cols;
    	int channels = src.channels();
    	Mat dst(src.size(), src.type(), Scalar(0));
    	int S = s1 * s2;
    	int i0 = (s1 - 1) / 2;
    	int j0 = (s2 - 1) / 2;
    	for (int m = i0; m < rows - i0; m++) {
    		for (int n = j0 * channels; n < (cols - j0) * channels; n++) {
    			for (int i = -i0; i <= i0; i++) {
    				for (int j = -j0; j <= j0; j++) {
    					dst.at<uchar>(m, n) += (src.at<uchar>(m + i, n + j * channels) / S);
    				}
    			}
    			if (abs(dst.at<uchar>(m, n) - src.at<uchar>(m, n)) <= T) {
    				dst.at<uchar>(m, n) = src.at<uchar>(m, n);
    			}
    		}
    	}
    	return dst;
    }
    

    灰度差值门限法平滑噪声效果:
    在这里插入图片描述
    可以看出这种方法比单纯使用简单平均法更能保护图像信息

    2.3. 加权平均法

    当处理图像内部区域的边界点时,由于边界点与周围的反差较大,那么邻域平均法处理后边界点必然会变得模糊,为了解决这个问题,,可采用加权平均法,即根据参与平均像素的特点赋予不同的权值。下面实现两种常见的加权算子。
    中心加权算子以及中心和四邻点加权算子是常见的两种算子,其中:
    中心加权算子:
    1 / 10 [ 1 1 1 1 2 1 1 1 1 ] 1/10\begin{bmatrix} 1&1&1\\ 1&2&1\\ 1&1&1 \end{bmatrix} 1/10111121111

    中心和四邻点加权算子:
    1 / 16 [ 1 2 1 2 4 2 1 2 1 ] 1/16\begin{bmatrix} 1&2&1\\ 2&4&2\\ 1&2&1 \end{bmatrix} 1/16121242121
    算法的关键程序代码如下:

    Mat ImageSmoothing::weightedAvg(Mat input, Array<double> w)//加权平均法
    {
    	Mat src = input.clone();
    	int imgRows = src.rows;
    	int imgCols = src.cols;
    	int channels = src.channels();
    	Mat dst(src.size(), src.type(),Scalar(0));
    	int wRows = w.getRows();
    	int wCols = w.getCols();
    	int i0 = wRows / 2;
    	int j0 = ((int)(wCols /2))* channels ;
    	for (int i =i0; i < imgRows -i0; i++) {
    		for (int j = j0; j < imgCols * channels - j0; j++) {
    			for (int m = 0; m < wRows; m++) {
    				for (int n = 0; n < wCols; n++) {
    					dst.at<uchar>(i, j) +=
    						(w.getItem(m, n) * src.at<uchar>(i - i0 + m , j - j0 + n * channels));
    				}
    			}
    		}
    	}
    	return dst;
    }
    

    其中的Array类是自定义的类,定义如下:

    #include <xloctime>
    
    template <class T>
    class Array
    {
    private:
    	T** data;
    	int rows;//列数
    	int cols;//行数
    public:
    	Array(int rows, int cols); 
    	~Array() {};
    	void addItem(T item, int row, int col);
    	T getItem(int row, int col);
    	int length();
    	int getRows();
    	int getCols();
    
    };
    
    template <class T>
    inline Array<T>::Array(int rows, int cols) {
    	this->rows = rows;
    	this->cols = cols;
    	data = (T**)malloc(sizeof(T) * cols);
    	if (!data) {
    		std::cout << "Array数组申请空间失败" << std::endl;
    		exit(0);
    	}
    	for (int i = 0; i < rows; i++) {
    		data[i] = (T*)malloc(sizeof(T) * cols);
    		if (!data[i]) {
    			std::cout << "Array数组申请空间失败" << std::endl;
    			exit(0);
    		}
    	}
    }
    
    template<class T>
    inline void Array<T>::addItem(T item, int row, int col)
    {
    	data[row][col] = item;
    }
    
    template<class T>
    inline T Array<T>::getItem(int row, int col)
    {
    	return data[row][col];
    }
    
    template<class T>
    inline int Array<T>::length()
    {
    	return rows * cols;
    }
    
    template<class T>
    inline int Array<T>::getRows()
    {
    	return rows;
    }
    
    template<class T>
    inline int Array<T>::getCols()
    {
    	return cols;
    }
    
    

    对以上两种算子的测试代码如下:

    #include <iostream>
    #include<opencv2/opencv.hpp>
    using namespace cv;
    #include"ImageSmoothing.h"
    #include "addNoise.h"
    #include "Array.h"
    
    int main()
    {
    	Mat src = imread("1.jpg");
    	if (src.empty()) {
    		std::cout << "图片加载失败" << std::endl;
    		return -1;
    	}
    	namedWindow("原图", WINDOW_NORMAL);
    	imshow("原图", src);
    	Mat src2 = addNoise::addGaussianNoise(src);
    	namedWindow("加噪图", WINDOW_NORMAL);
    	imshow("加噪图", src2);
    	
    	double p1[3][3] = { {0.1,0.1,0.1},{0.1,0.2,0.1},{0.1,0.1,0.1} };
    	Array<double> w1(3, 3);
    	for (int i = 0; i < 3; i++) {
    		for (int j = 0; j < 3; j++) {
    			w1.addItem(p1[i][j], i, j);//为中心加权算子赋值
    		}
    	}
    	Mat dst1 = ImageSmoothing::weightedAvg(src2, w1); 
    	w1.~Array();
    	namedWindow("中心加权算子平滑效果", WINDOW_NORMAL);
    	imshow("中心加权算子平滑效果", dst1);
    	double item = (double)1 / 16;
    	double p2[3][3] = { {item,2*item,item},{item,2 * item,item},{2*item,4 * item,2*item} };
    	Array<double> w2(3, 3);
    	for (int i = 0; i < 3; i++) {
    		for (int j = 0; j < 3; j++) {
    			w2.addItem(p2[i][j], i, j);//为中心及4邻点加权算子赋值
    		}
    	}
    	Mat dst2 = ImageSmoothing::weightedAvg(src2, w2);
    	w2.~Array();
    	namedWindow("中心及4邻点加权算子平滑效果", WINDOW_NORMAL);
    	imshow("中心及4邻点加权算子平滑效果", dst2);
    	waitKey(0);
    	return 1;
    }
    

    加权平均平滑图像的效果:
    在这里插入图片描述
    可以看出这种方法比简单的平均效果要好,对图像的损害相对较小。
    简单平均法和加权平均法都可以通过opencv提供的filter2D函数进行掩码操作来实现,filter2D实现更加方便,但此处不再展开。掩码操作可参考opencv+c++实现掩膜操作

    3. 多图平均法

    f m f_m fm表示参与平均的第 m m m幅图片,则多图平均后的图片在像素点 ( i , j ) (i,j) (i,j)处的灰度值为:
    在这里插入图片描述
    假设图像 g g g受到噪声 n n n的干扰,则受干扰图像 f m f_m fm在像素点 ( i , j ) (i,j) (i,j)处的灰度值为:
    f m ( i , j ) = g ( x , y ) + n m ( i , j ) f_m(i,j)=g(x,y)+n_m(i,j) fm(i,j)=g(x,y)+nm(i,j)
    多图平均后的图片在像素点 ( i , j ) (i,j) (i,j)处的灰度值为:
    在这里插入图片描述
    噪声的期望值为0,方差为 σ 2 \sigma^2 σ2,则多图平均后期望仍为0,但方差变为 σ 2 / M \sigma^2/M σ2/M,而图像信号仍为 g g g,并未被平滑,从而达到了抑制噪声的效果。参与平均的图像数目越多,消减噪声的效果越好,当参与平均的图像数目趋于无穷大时,噪声也就趋于0。如果能在相同的条件下对同一景物获取若干张图片,多图平均法是不错的选择。
    算法的关键程序代码如下:

    Mat ImageSmoothing::multImgAvg(Mat* input, int imgNum)//多图平均法
    {//imgNum为输入图像数量
    	for (int i = 1; i < imgNum; i++) {
    		if (input[0].size() != input[i].size() || input[0].type() != input[i].type()) {
    			std::cout << "请输入一样尺寸,一样类型的图片" << std::endl;
    			exit(0);
    		}
    	}
    	Mat dst(input[0].size(),input->type(),Scalar(0));
    	int rows = input[0].rows;
    	int cols = input[0].cols;
    	int channels = input[0].channels();
    	for (int i = 0; i < rows; i++) {
    		for (int j = 0; j < cols * channels; j++) {
    			double val = 0;
    			for (int k = 0; k < imgNum; k++) {
    				val +=(double) input[k].at<uchar>(i,j) / imgNum;
    			}
    			dst.at<uchar>(i, j) = (uchar)val;
    		}
    	}
    	return dst;
    }
    

    测试程序代码如下:

    #include <iostream>
    #include<opencv2/opencv.hpp>
    using namespace cv;
    #include"ImageSmoothing.h"
    #include "addNoise.h"
    #include "Array.h"
    
    int main()
    {
    	Mat src = imread("1.jpg");
    	if (src.empty()) {
    		std::cout << "图片加载失败" << std::endl;
    		return -1;
    	}
    	namedWindow("原图", WINDOW_NORMAL); 
    	imshow("原图", src);
    	Mat* input;
    	Mat p[25] ;
    	for (int i = 0; i < 25; i++) {
    		p[i] = addNoise::addGaussianNoise(src);
    	}
    	input = p;
    	for (int i = 5; i <= 25; i = i + 5) {
    		Mat dst = ImageSmoothing::multImgAvg(input, i);
    		std::string str = "图片数为";
    		str.append(std::to_string(i));
    		namedWindow(str, WINDOW_NORMAL);
    		imshow(str, dst);
    	}
    	waitKey(0);
    	return 1;
    }
    
    

    测试效果:
    在这里插入图片描述
    如果愿意等,用100张受干扰图片进行平均,发现平均后的图基本和原图是一样的。

    4. 中值滤波法

    由于噪声相对于周围的像素反差较大,含噪的像素一般不是偏亮就是偏暗。如果把一个邻域内的像素点按大小进行排序,如果存在噪声,那么噪声点肯定在排序后的序列的两端,此时取中间值进行输出,就可以消除噪声的影响,这就是中值滤波的思想。
    所谓中值滤波就是存在一个确定的领域A,规定图像中值滤波后某像素点的输出等于该像素点邻域中各像素值的灰度的中值。阵列 [ x ( i , j ) ] [x(i,j)] [x(i,j)]经过窗口 A n A_n An中值滤波后,像素点 ( i , j ) (i,j) (i,j)的输出记为:
    y ( i , j ) = m e d [ x ( i , j ) ] y(i,j)=med[x(i,j)] y(i,j)=med[x(i,j)]
    算法的关键程序代码如下(取 A n A_n An为矩形窗口):

    Mat ImageSmoothing::medBlur(Mat input, int Asize)
    {//Asize为窗口大小(正方形)
    	Mat src = input.clone();
    	int imgRows = src.rows;
    	int imgCols = src.cols;
    	int channels = src.channels();
    	Mat dst(src.size(), src.type(), Scalar(0));
    	int i0 = Asize / 2;
    	int j0 = i0*channels;
    	for (int i =i0; i < imgRows-i0; i++) {
    		for (int j = j0; j <( imgCols-j0)* channels; j++) {
    			Mat arr(1,Asize*Asize, CV_8UC1);
    			for (int m = 0; m < Asize;m++) {
    				for (int n = 0; n < Asize; n++) {
    					arr.at<uchar>(0,m*Asize+n) = src.at<uchar>(i - i0 + m, j - j0 + n * channels);
    				}
    			}
    			sort(arr, arr,0);
    			if (Asize % 2) {
    				dst.at<uchar>(i, j) = arr.at<uchar>(0, Asize * Asize / 2);
    			}
    			else {
    				dst.at<uchar>(i, j) =(uchar)( (int)(arr.at<uchar>(0, Asize * Asize / 2)+ arr.at<uchar>(0, (Asize * Asize / 2)-1))/2);//Asize偶数时取中间两个平均值
    			}
    		}
    	}
    	return dst;
    }
    

    测试代码如下:

    #include <iostream>
    #include<opencv2/opencv.hpp>
    using namespace cv;
    #include"ImageSmoothing.h"
    #include "addNoise.h"
    int main()
    {
    	Mat src = imread("1.jpg");
    	if (src.empty()) {
    		std::cout << "图片加载失败" << std::endl;
    		return -1;
    	}
    	namedWindow("原图", WINDOW_NORMAL); 
    	imshow("原图", src);
    	Mat src2 = addNoise::addGaussianNoise(src);
    	namedWindow("加噪图", WINDOW_NORMAL);
    	imshow("加噪图", src2);
    	Mat dst1=ImageSmoothing::medBlur(src2,3);
    		namedWindow("3X3中值滤波", WINDOW_NORMAL);
    		imshow("3X3中值滤波", dst1);
    		Mat dst2= ImageSmoothing::medBlur(src2, 5);
    		namedWindow("5X5中值滤波", WINDOW_NORMAL);
    		imshow("5X5中值滤波", dst2);
    		Mat dst3;
    		blur(src2, dst3, Size(5,5));//均值滤波
    		namedWindow("5X5均值滤波", WINDOW_NORMAL);
    		imshow("5X5均值滤波", dst3);
    	
    	
    	waitKey(0);
    	return 1;
    }
    
    

    中值滤波与均值滤波对比
    在这里插入图片描述
    可以看出中值滤波效果比均值滤波好,同时中值滤波也会随着滤波窗口的增大,而对图像损害越来越大

    5. 高斯滤波

    图像大多数噪声均属于高斯噪声,因此高斯滤波器应用也较广泛。
    高斯滤波去噪就是对整幅图像像素值进行加权平均,针对每一个像素点的值,都由其本身值和邻域内的其他像素值经过加权平均后得到。
    高斯滤波在空间域的处理方法关键就是确定高斯核,所谓高斯核,就是根据根绝高斯分布函数确定的加权算子,也就是说高斯滤波是一种特殊的加权平均法。
    一维高斯分布:
    在这里插入图片描述

    二维高斯分布:
    在这里插入图片描述
    以3以下3X3的高斯核为例:
    [ h ( − 1 , − 1 ) h ( − 1 , 0 ) h ( − 1 , 1 ) h ( 0 , − 1 ) h ( 0 , 0 ) h ( 0 , 1 ) h ( 1 , − 1 ) h ( 1 , 0 ) h ( 1 , 1 ) ] \begin{bmatrix} h(-1,-1)&h(-1,0)&h(-1,1)\\ h(0,-1)&h(0,0)&h(0,1)\\ h(1,-1)&h(1,0)&h(1,1) \end{bmatrix} h(1,1)h(0,1)h(1,1)h(1,0)h(0,0)h(1,0)h(1,1)h(0,1)h(1,1)
    将各个位置的坐标带入到高斯分布函数中,则可以确定 h ( i , j ) h(i,j) h(i,j),比如:(以 σ = 0.8 \sigma=0.8 σ=0.8为例)
    在这里插入图片描述
    对于高斯核的大小为 (2k+1)×(2k+1)的窗口,窗口中各个元素值的计算公式如下:
    在这里插入图片描述
    算法的关键程序代码如下:

    Mat ImageSmoothing::guassianBlur(Mat inputImg, int templeSize, double sigma)
    {//高斯滤波
    	if (templeSize % 2 == 0) {
    		std::cout << "只处理奇数尺寸的模板窗口" << std::endl;
    		exit(0);
    	}
    	Mat src = inputImg.clone();
    	int k = templeSize / 2;
    	Array<double> H(templeSize, templeSize);
    	double sigma2 = sigma * sigma;
    	for (int i = 0; i < templeSize; i++) {
    		for (int j = 0; j < templeSize; j++) {
    			double data = exp(-(pow(i-k,2)+pow(j-k,2))/(2*sigma2))/(2*M_PI*sigma2);
    			H.addItem(data, i, j);
    		}
    	}
    	Mat dst = weightedAvg(src,H);//高斯滤波是特殊的加权平均法
    	return dst;
    }
    

    高斯滤波效果:
    在这里插入图片描述

    在高斯滤波中标准差代表着数据的离散程度,如果 σ \sigma σ较小,那么生成的高斯核的中心系数较大,而周围的系数较小,这样对图像的平滑效果就不是很明显;反之, σ \sigma σ较大,则生成的高斯核的各个系数相差就不是很大,比较类似均值滤波,对图像的平滑效果比较明显

    6. opencv的平滑处理函数

    上面图像平滑所涉及的滤波方法,在opencv中都是直接提供了相关函数的。下面使用分别使用blur(),medianBlur(),GaussianBlur进行均值滤波,中值滤波以及高斯滤波。

    #include <iostream>
    #include<opencv2/opencv.hpp>
    using namespace cv;
    #include "addNoise.h"
    int main()
    {
    	Mat src = imread("1.jpg");
    	if (src.empty()) {
    		std::cout << "图片加载失败" << std::endl;
    		return -1;
    	}
    	namedWindow("原图", WINDOW_NORMAL); 
    	imshow("原图", src);
    	Mat src2 = addNoise::addGaussianNoise(src);
    	namedWindow("加噪图", WINDOW_NORMAL);
    	imshow("加噪图", src2);
    	Mat dst1;
    	GaussianBlur(src2,dst1,Size(3,3),0.8,0.8);
    	namedWindow("高斯滤波", WINDOW_NORMAL);
    	imshow("高斯滤波", dst1);
    	Mat dst2;
    	blur(src2, dst2, Size(3, 3));
    	namedWindow("均值滤波", WINDOW_NORMAL);
    	imshow("均值滤波", dst2);
    	Mat dst3;
    	medianBlur(src2, dst3, 3);
    	namedWindow("中值滤波", WINDOW_NORMAL);
    	imshow("中值滤波", dst3);
    	
    	waitKey(0);
    	return 1;
    }
    
    

    效果如下:
    在这里插入图片描述

    7. 总结

    图像平滑能够平滑掉图像噪声,图像平滑操作除了上述方法外,还包括很多处理方法,比如双边滤波法,频率域处理等。

    展开全文
  • 1,均值滤波:任意一个点的像素都是周围N*N个像素值的均值,将N*N的大小称为核的大小核大小一般用元组表示:(行,列)#图像平滑:均值滤波#函数blur#dst=cv2.blur(src,核):核的格式=(行,列)import cv2a=cv2.imread...
  • 几种平滑处理方法

    2021-03-09 07:46:35
    平滑,也可叫滤波,或者合在一起叫平滑滤波,平滑滤波是低频增强的空间域滤波技术。它的目的有两类:一类是模糊;另一类是消除噪音。空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平均亮度值。邻域的...
  • I am doing research on line generalization, which will be applied to obtain generalized Road Network map from large scale map to small scale map. I am using two operation and two algorithms....
  • numpy之数据平滑处理

    2021-04-27 07:07:51
    数据平滑:通常包含降噪、拟合等操作。降噪的功能在于去除额外的影响因素,拟合的目的在于数学模型化,可以通过更多的数学方法识别曲线的特征。2.绘制两支股票的收益率---收益率 =(后一天的收盘价 - 前一天的收盘价)...
  • 通过以上几个步骤我们就可以实现基本的画板功能了,然而事情并没那么简单,仔细的童鞋也许会发现一个很严重的问题——通过这种方式画出来的线条存在锯齿,不够平滑,而且你画得越快,折线感越强。表现如下图所示: ...
  • 文章目录 1. 论文 1.1 Label Smoothing 1.2 Focal Loss 2. 代码实现 2.1 Label Smoothing loss function 2.2 labels mooth+类别不均衡loss 1....1.1 Label Smoothing https://arxiv.org/abs/1906.02629 When Does Label Smoothing Help? https://arxiv.org/abs/1701.06548 Regularizing Neural Networks by Penalizing Confident Output Distributions https://arxiv.org/abs/1706.04599 On Calibration of Modern Neural Networks 1.2 Focal Loss https://arxiv.org/abs/1708.02002 Focal Loss for Dense Object Detection 标签平滑... 2. 代码实现 2.1 Label Smoothing ...
  • 目的:通过SPI从硬件上采集数据点,然后通过这些点绘制平滑的曲线,最后可以根据该曲线计算精度,要求精度能达到0.01以上!基本思路:1.采集原始数据集,即point点集;2.对这些点进行曲线拟合处理后,产生新的曲线点集;...
  • 在本次实验中,使用 sobel 模板进行梯度的运算,Sobel 模板能较好的抑制(平滑)噪声,其模板形式如下图: 代码如下 : clc %清除命令窗口的内容 close all %关闭所有的Figure窗口 clear all %清除工作空间的所有变量 ...
  • 高斯平滑操作是一个二维卷积操作,用于**“模糊”**图像,去除细节和噪音。它类似于均值滤波器(假如3X3,则全部相加取均值,即成为中间点的像素值),但它使用不同的核表示高斯驼峰的形状。 二维高斯公式 平均值(0...
  • 平滑滤波是光谱分析中常用的预处理方法之一,处理的方法有很多,这里我们使用make_interp_spline插值法对折线图进行平滑处理。 官方帮助文档:scipy.interpolate.make_interp_spline 处理前的图 处理后的图 源码...
  • 使用拉格朗日插值平滑曲线 1 平滑前后效果对比: 平滑平滑后 2 拉格朗日插值代码:(参考cesium源码) 结合拉格朗日原理:https://zhuanlan.zhihu.com/p/135229305 源码如下:...
  • 照明平滑度损失 LtvAL_{tv_\mathcal{A}}LtvA​​ 5.总损失 实验结果 出处 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) 创新点 1.提出了第一个无参考网络(有待考究),避免了有...
  • 图片缩放会造成图像的模糊,通过PIL库,我们可以将让图片边缘增强、锐利、平滑等从而让图片更加清晰,以下是代码,可以批处理图像 # coding: utf-8 from PIL import Image,ImageFilter import os from PIL import...
  • 关键词 smooth 还有其他的值 当type为line时 smooth 表示 是否平滑曲线显示。 如果是 boolean 类型,则表示是否开启平滑处理。如果是 number 类型(取值范围 0 到 1),表示平滑程度,越小表示越接近折线段,反之则...
  • 结合总变差代表着图信号整体平滑度的实际意义,我们可以发现,特征值依次排列在一起,对图信号的平滑度做出了一种梯度刻画,因此可以将特征值等价成频率。特征值越低,频率越低,对应的傅里叶基就变化的越慢,相近...
  • LeGO-LOAM算法详解

    2021-08-16 11:33:16
    LeGO-LOAM算法详解 整体框架 LeGO-LOAM算法的总体框架如下图所示: 图中新增加了绿框中的Segmentation环节,同时对后续的特征提取、Odometry以及Mapping部分均有...特征点选取中原始LOAM为按照平滑度的值及已有特征点
  • 和等好标不包括的衡基金股票风险量指。腰腰我国的会的会遵循基金计核计政求...的基单位依据值后值而资产经基金资金资计算基金净值确定产估产净出的,平滑。我国行(基金管理管理人的费实,和等好目前。腰腰本包的管投...
  • 当我看到某些JPG文件时,颜色变平.这是一个简单的例子,它读取一个jpg,并将同一个图像写入另一个文件.import java.awt.image.BufferedImage;import java.io.File;import javax.imageio.ImageIO;public class ...
  • 该flow提供了一个补充信息源,允许网络利用运动场中的平滑度来提升鲁棒性。   Update:correlation features和flow features在注入GRU之前分别通过两个卷积层进行映射。此外,通过逐像素的加法将上下文网络提取的...
  • smoothdata对含噪信号进行平滑处理 movmean利用滑动平均法对含噪信号进行平滑处理 1.2中值滤波:medfilt1 1.3卷积滤波:conv 1.4Savitzky-Golay滤波 sgolay创建Savitzky-Golay滤波器,用于对信号进行平滑...
  • 裁切路径命令对话框中的平滑度是用来定义什么的:B A. 定义曲线由多少个节点组成 B. 定义曲线由多少个直线片段组成 C. 定义曲线由多少个端点组成 D. 定义曲线边缘由多少个象素组成 67.在photoshop中有哪几种通道:...
  •     连续性:改变切线之间变化的清晰;   给出了四个连续控制点,记为Pk-1、Pk、Pk+1和Pk+2,在Pk和Pk+1间的Konchanek-Bartels曲线段中的边界条件定义为:     P(0) = pk;     P(1) = pk+1;    ...
  • 这些损失的组合 → 导致更平滑的预测。 损失越多越好?看来他们的情况就是这样: —END— 英文原文:https://medium.com/@SeoJaeDuk/cvpr-basnet-boundary-aware-salient-object-detection-a025c7f7d94f 请长按或...
  • 当c>0时,核函数表现为平滑双曲面函数(图1)。 3.研究方法是什么? 选取江苏、山东、河南、贵州、西藏等5个地区,15km×15km范 围 内 的30m 分 辨 率 ASTER GDEM 作为 基 础 源 数 据,...
  • 全局敏感,局部敏感平滑敏感到底有什么区别?【踩坑笔记】写在前面的话噪声校准全局敏感:局部敏感度平滑敏感噪声分布范围自己的理解 写在前面的话 关于敏感相关的知识,我认为这是差分隐私的重中之重...
  • 当您将鼠标悬停在蓝色圆圈上时,会打开一个彩色圆圈,但开口不稳定,不是100%平滑.动画可以平滑,怎么样?#container {border: 1px solid black;width: 600px;height: 600px;position: relative;}#circle {margin: 0;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,505
精华内容 41,802
关键字:

平滑度