1. 程式人生 > >C++獲取高斯核算法

C++獲取高斯核算法

高斯濾波是一種線性平滑濾波,適用於消除高斯噪聲。高斯濾波的過程其實就是對整幅影象進行加權平均操作的過程。

原理:用一個大小為(2*N+1)的模板(或稱卷積核、掩模)依次掃描影象中的每一個畫素,用模板確定的鄰域內畫素的加權平均灰度替代模板中心畫素點的灰度值。

二維高斯函式具有旋轉對稱性,即濾波器在各個方向上的平滑程度是相同的.一般來說,一幅影象的邊緣方向是事先不知道的,因此,在濾波前是無法確定一個方向上比另一方向上需要更多的平滑.旋轉對稱性意味著高斯平滑濾波器在後續邊緣檢測中不會偏向任一方向

高斯函式是單值函式。這表明,高斯濾波器用畫素鄰域的加權均值來代替該點的畫素值,而每一鄰域畫素點權值是隨該點與中心點的距離單調增減的

。這一性質是很重要的,因為邊緣是一種影象區域性特徵,如果平滑運算對離運算元中心很遠的畫素點仍然有很大作用,則平滑運算會使影象失真;相同條件下,高斯卷積核的尺寸越,影象的平滑效果越好,表現為影象越模糊,同時影象細節丟失的越多,邊緣資訊也同時丟失;尺寸越小,平滑效果越弱,影象細節丟失越少。

所以,在使用高斯平滑時,要選擇合適的引數,達到平滑的目的。

C++對高斯卷積核引數求解:

  1. void GetGaussianKernel(double **gaus, constint size,constdouble sigma)  
  2. {  
  3.     constdouble PI=4.0*atan(1.0); 
  4.     int center=size/2;  
  5.     double sum=0;  
  6.     for(int i=0;i<size;i++)  
  7.     {  
  8.         for(int j=0;j<size;j++)  
  9.         {  
  10.             gaus[i][j]=(1/(2*PI*sigma*sigma))*exp(-((i-center)*(i-center)+(j-center)*(j-center))/(2*sigma*sigma));  
  11.             sum+=gaus[i][j];  
  12.         }  
  13.     }  
  14.     for
    (int i=0;i<size;i++)  
  15.     {  
  16.         for(int j=0;j<size;j++)  
  17.         {  
  18.             gaus[i][j]/=sum;  
  19.         }  
  20.     }  
  21.     return ;  
  22. }  
注意:該函式第一引數是獲得的高斯核,為二維陣列;第二個引數是高斯核的大小;第三個尺寸是標準差。一般情況下:size = 4 * σ + 1;

相關推薦

C++獲取核算

高斯濾波是一種線性平滑濾波,適用於消除高斯噪聲。高斯濾波的過程其實就是對整幅影象進行加權平均操作的過程。 原理:用一個大小為(2*N+1)的模板(或稱卷積核、掩模)依次掃描影象中的每一個畫素,用

下降解多元一次方程組(C++實現)

昨天演算法上機出了一道求多元一次方程組的題目,大神們早早就提交了,而我弄了很久,然而並不能在規定時間內完成。究其原因,是線性代數的知識已經忘光了。痛定思痛,我決定把這個題目弄出來,上傳到CSDN部落格,以警醒我日後仍需多加用功。 本文的程式碼涉及到以下幾個

實現

通過 像素點 對稱 div 來講 圓形 除了 eight 實際應用 高斯算法的原理 首先,高斯濾波算法的一般過程分為兩步: 計算掩膜(高斯核) 卷積(即掩膜上每一個位置的值和圖像對應位置的像素值的乘積、求和運算) 其次,我們知道高斯分布也叫做正態分布;

C++生成白噪聲的程式

高斯白噪聲本質上是均值為0的正態分佈。 #include <iostream> #include <iterator> #include <random> int main() { // Example dat

迭代求解最優化問題——最小二乘問題、牛頓

最小二乘問題 最小二乘問題是應用最廣泛的優化問題,它的一般形式如下: minx||r(x)||2 該問題的損失函式為S(x)=||r(x)||2。其中r(x)為殘差函式,一般表示預測值與實際值的差別。一個最簡單的最小二乘問題就是線性迴歸問題,對於這個問題的

數值優化之-牛頓(Gauss-Newton)

一、基本概念定義1.非線性方程定義及最優化方法簡述   指因變數與自變數之間的關係不是線性的關係,比如平方關係、對數關係、指數關係、三角函式關係等等。對於此類方程,求解n元實函式f在整個n維向量空間Rn上的最優值點往往很難得到精確解,經常需要求近似解問題。   求解該最優化問

梯度下降、牛頓牛頓、LM最優化算

src tro 分享 image 最優化 ima str img 圖片 1、梯度下降法 2、牛頓法 3、高斯牛頓法 4、LM算法 梯度下降法、牛頓法、高斯牛頓法、LM最優化算法

實現求解線性方程(矩陣、消去)------c++程序設計原理與實踐(進階篇)

ipy 類型 cat sys sca solution gaussian 拷貝 img 步驟: 其中A是一個n*n的系數方陣 向量x和b分別是未知數和常量向量: 這個系統可能有0個、1個或者無窮多個解,這取決於系數矩陣A和向量b。求解線性系統的方法有很多,這裏使用一種經典

數值分析(三):C++實現線性方程組的-賽德爾迭代

線性方程組的直接解法之後,就輪到迭代解法了,直接解法針對的是低階稠密矩陣,資料量較少,而工程上有更多的是高階係數矩陣,使用迭代法效率更高,佔用的空間較小。 迭代法的最基本思想就是由初始條件,比如說初始解向量隨便列舉一個,就0向量也行,然後進行迭代,k到k+1,一步一步從k=1開始去逼近真實解

計算方法——C語言實現——全主元消元求解非線性方程

最近在上計算方法這門課,要求是用MATLAB做練習題,但是我覺得C語言也很棒棒啊~ 題目: 高斯消元法是線性方程組的直接解法,可能會造成很大的失真,尤其是高斯順序消元法,對方法進行改進,使每次都選取絕對值最大的元素為主元,使其為乘數的分母,控制舍入誤差的擴大,

-賽德爾(guass-seidel)迭代 C語言實現

#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #in

消元,全主元素C語言實現

#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; double A[1010][1010

消去解線性方程組C++實現

       一.問題分析:高斯消去法解線性方程組主要面對的問題是矩陣的運算,所以可以定義一個矩陣類Matrix類作為基類,然後由矩陣類Matrix類派生出一個線性方程組類LinearEqu類。    &n

C# 多元一次方程演算法,消元列主消元比較

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleAp

雅克比迭代塞德爾迭代求解方程組(C語言)

分別用雅可比 迭代法與高斯塞德爾迭代法解下列方程組: 雅可比迭代法: #include<stdio.h> #include<math.h> #define eps 1

約當求逆矩陣的演算法實現(C++)

#include"iostream.h" #include"math.h" void main() { float a[10][10],A[10][10],b[10],c[10][10],d=0,f=0; int i=0,j=0,k=1,l=0,m=0,n=0; //---

【BZOJ3168】[Heoi2013]鈣鐵鋅硒維生素 消元求矩陣的逆+匈牙利算

def strong bzoj light sof turn 防止 宇宙 != 【BZOJ3168】[Heoi2013]鈣鐵鋅硒維生素 Description 銀河隊選手名單出來了!小林,作為特聘的營養師,將負責銀河隊選手參加宇宙比賽的飲食。眾所周知,前往宇宙的某個

列選主元的消元的Fortran程序

scrip element final ... 博客 hang then ogr side 要用到之前發的解上三角矩陣和下三角矩陣方程的模塊tri_eq.f90。 博客園代碼不支持fortran格式。。。 1 module lina_gauss 2 !------

【算設計與分析基礎】16、消元

ane sys cnblogs 根據 gauss tostring logs junit air package cn.xf.algorithm.ch06ChangeRule; import java.util.ArrayList; import java.util.L