快速高斯模糊 實現及相干題目

2021-06-19 14:32:10 字數 3165 閱讀 9769

2023年9月9日  原文

經過厲害博主imageshop的博文提示,

我這裡實現了高斯模糊函式,然則有一下幾點題目向各位叨教商量:

①這個函式處理懲罰速度沒有imageshop博主描述的速度快,如何進步效力。

②高斯模糊後感觸感染整幅影象會向右下角平移必然間隔,沒有具體研究過演算法本身,如許是否為正常,有何解決規劃,大師一路商量。(反正我用高斯模糊後影象載進行usm銳化獲得了我感覺很不睬想的成果,原因應當就是這個平移造成的)

③高手幫看看我這個函式是否本身就有錯

我做的工作很簡單

①我將contrast-retinex.c中關於高斯模糊的**全集中在乙個函式中,使這個此函式加倍自力。如許也削減了一些記憶體分派開釋的次數

②縱向處理懲罰後將資料指標in和out直接對調劑理懲罰,省去了在此不值一提的拷貝過程

③呼叫這個函式實現高斯模糊查算作果

如今將**及成果貼出:

高斯函式:

/****************************************

* src : 原始影象資料 *

* dst : 模糊後影象資料 *

* width : 影象寬 *

* height : 影象高 *

* sigma : 高斯引數 *

* chan : 影象通道數 *

*****************************************/

void img_gaussblur(unsigned char* src, unsigned char*& dst, int width, int height, float sigma, int chan)

else

float* w1 = (float *) malloc (bufsize * sizeof (float));

float *w2 = (float *) malloc (bufsize * sizeof (float));

float *in = (float *) malloc (channelsize * sizeof (float));

float *out = (float *) malloc (channelsize * sizeof (float));

//----------------策畫高斯核---------------------------------------//

//compute_coefs3(coef, sigma);

float q = 0;

float q2, q3;

double b[4] = ;

double b = 0;

int n = 3;

if (sigma >= 2.5)

else if ((sigma >= 0.5) && (sigma < 2.5))

else

q2 = q * q;

q3 = q * q2;

b[0] = (1.57825+(2.44413*q)+(1.4281 *q2)+(0.422205*q3));

b[1] = ( (2.44413*q)+(2.85619*q2)+(1.26661 *q3));

b[2] = ( -((1.4281*q2)+(1.26661 *q3)));

b[3] = ( (0.422205*q3));

b = 1.0-((b[1]+b[2]+b[3])/b[0]);

//----------------策畫高斯核停止---------------------------------------//

// 處理懲罰影象的多個通道

for (channel = 0; channel < chan; channel++)

//縱向處理懲罰

for (row=0 ;row < height; row++)

/** backward pass */

w2[size+1]= w1[size+3];

w2[size+2]= w1[size+3];

w2[size+3]= w1[size+3];

for (i = size, n = i; i >= 0; i--, n--)

}//下面的橫向處理懲罰直接將資料 out 與 in 對調 省去memcpy

//memcpy(in, out, channelsize * sizeof(float));

//memset(out, 0 , channelsize * sizeof(float));

//橫向處理懲罰

for (col=0; col < width; col++)

w2[size+1]= w1[size+3];

w2[size+2]= w1[size+3];

w2[size+3]= w1[size+3];

for (i = size, n = i; i >= 0; i--, n--)

}//拷貝成果到函式輸出指標

for (i = 0, pos = channel; i < channelsize ; i++, pos += chan)

}free (w1);

free (w2);

free (in);

free (out);

}

view code

呼叫辦法:

//儲存或顯示成果,略...

履行成果:

sigma=2.0

379   x 513     耗時   61ms

sigma=5.0

2304 x 1728  耗時   1870ms

高斯模糊原理及實現

高斯模糊即對指定畫素和其周圍畫素進行加權平均來得到最終結果,使用高斯分布作為濾波器。高斯分布即為正太分布,1維和2維正態分佈密度函式如下 這裡設 0,0.u為期望,為標準差,為函式影象的拐點,越大曲線越矮越寬,即取樣範圍越大。在這兩個函式中,x,y表示相對於中心畫素 0,0 的偏移量 以畫素為單位 ...

iOS高斯模糊實現

在需要模糊的uiview上,新增乙個uivisualeffectview物件即可。效果如下圖 如下 執行在ios8版本前的模擬器上高斯模糊效果就沒有了 uiimageview imageview uiimageview alloc init imageview.frame cgrectmake 10...

高斯模糊的實現

今天設計提出來乙個需求,第一耳聽到時,我就蒙逼了。她說 這個頭像的背景你就用使用者頭像的圖示高斯模糊100 黑色的蒙層30 的不透明 後來經過我的不懈努力,在網上找到了完美的解決方案,驚奇的發現,所謂高大上的高斯模糊又稱為 毛玻璃效果 說毛玻璃效果就很easy了,網上一搜一大把的實現方式,結果都是使...