梯度金字塔方向濾波

2021-05-23 11:24:17 字數 4018 閱讀 2776

#include"cv.h"

#include"highgui.h"

//用梯度金字塔變換實現彩色影象四個方向的濾波

//下面是單獨對空間的申請

/*pimg[1] = cvcreateimage(cvsize(pimg[0]->width/2, pimg[0]->height/2),

ipl_depth_8u,

pimg[0]->nchannels);

pimg[2] = cvcreateimage(cvsize(pimg[0]->width/4, pimg[0]->height/4),

ipl_depth_8u,

pimg[0]->nchannels);

pimg[3] = cvcreateimage(cvsize(pimg[0]->width/8, pimg[0]->height/8),

ipl_depth_8u,

pimg[0]->nchannels);*/

/*pimg2[1] = cvcreateimage(cvsize(pimg[0]->width/2, pimg[0]->height/2),

ipl_depth_8u,

pimg[0]->nchannels);

pimg2[2] = cvcreateimage(cvsize(pimg[0]->width/4, pimg[0]->height/4),

ipl_depth_8u,

pimg[0]->nchannels);

pimg2[3] = cvcreateimage(cvsize(pimg[0]->width/8, pimg[0]->height/8),

ipl_depth_8u,

pimg[0]->nchannels);*/

/*dstj[0] = cvcreateimage(cvsize(pimg[0]->width, pimg[0]->height), ipl_depth_8u, 1);

dstk[0] = cvcreateimage(cvsize(pimg[0]->width, pimg[0]->height), ipl_depth_8u, 1);

dstl[0] = cvcreateimage(cvsize(pimg[0]->width, pimg[0]->height), ipl_depth_8u, 1);

dstj[1] = cvcreateimage(cvsize(pimg[0]->width/2, pimg[0]->height/2), ipl_depth_8u, 1);

dstk[1] = cvcreateimage(cvsize(pimg[0]->width/2, pimg[0]->height/2), ipl_depth_8u, 1);

dstl[1] = cvcreateimage(cvsize(pimg[0]->width/2, pimg[0]->height/2), ipl_depth_8u, 1);

dstj[2] = cvcreateimage(cvsize(pimg[0]->width/4, pimg[0]->height/4), ipl_depth_8u, 1);

dstk[2] = cvcreateimage(cvsize(pimg[0]->width/4, pimg[0]->height/4), ipl_depth_8u, 1);

dstl[2] = cvcreateimage(cvsize(pimg[0]->width/4, pimg[0]->height/4), ipl_depth_8u, 1);

dstj[3] = cvcreateimage(cvsize(pimg[0]->width/8, pimg[0]->height/8), ipl_depth_8u, 1);

dstk[3] = cvcreateimage(cvsize(pimg[0]->width/8, pimg[0]->height/8), ipl_depth_8u, 1);

dstl[3] = cvcreateimage(cvsize(pimg[0]->width/8, pimg[0]->height/8), ipl_depth_8u, 1);*/

pimg[0]=cvcloneimage(src); //

對pimgi

進行下取樣

for( i=0;i<3;i++)

cvpyrdown(pimg[i], pimg[i+1], cv_gaussian_5x5);

for( i=0;i<3;i++)

pimg2[i]=cvcloneimage(pimg[i]);

double ka[9] = ;//

這裡高斯核濾波器歸一化

cvmat k1;

k1 = cvmat( 3, 3, cv_64f, ka ); //

對pimgi

用高斯核濾波器濾波

//對每個通道分別進行濾波

for(i=0;i<4;i++)

for(i=0;i<4;i++)//

與原影象相加存入

pimgi

中cvadd(pimg[i],pimg2[i],pimg[i]); //

方向濾波器的構造

double l1[2] = ;

double l2[4]=;

double l3[2]=;

double l4[4]=;

/*cvmat lm1,lm2,lm3,lm4;

lm1 = cvmat( 1, 2, cv_64f, l1);

lm2 = cvmat( 2, 2, cv_64f, l2);

lm3 = cvmat( 2, 1, cv_64f, l3);

lm4 = cvmat( 2, 2, cv_64f, l4);*/

cvmat lm[4];

lm[0]=cvmat( 1, 2, cv_64f, l1);

lm[1]=cvmat( 2, 2, cv_64f, l2);

lm[2]=cvmat( 2, 1, cv_64f, l3);

lm[3]=cvmat( 2, 2, cv_64f, l4); //

用方向濾波器進行濾波,注意在這裡只能對一方向濾波

//for(i=0;i<4;i++)

//cvfilter2d( pimg[i], pimg[i], &lm1, cvpoint(-1,-1));

//for(i=0;i<4;i++)

//cvfilter2d( pimg[i], pimg[i], &lm2, cvpoint(-1,-1));

//for(i=0;i<4;i++)

//cvfilter2d( pimg[i], pimg[i], &lm3, cvpoint(-1,-1));

//for(i=0;i<4;i++)

//cvfilter2d( pimg[i], pimg[i], &lm4, cvpoint(-1,-1)); //

下面是對四個方向分別時行濾波

for(i=0;i<4;i++)

cvnamedwindow("image0", 1);

cvnamedwindow("image1", 1);

cvnamedwindow("image2", 1);

cvnamedwindow("image3",1);

cvshowimage("image0", pimg[0]);

cvshowimage("image1", pimg[1]);

cvshowimage("image2", pimg[2]);

cvshowimage("image3", pimg[3]);

cvwaitkey(0);

cvdestroyallwindows();

for(i=0;i<4;i++)

return 0; }

python 金字塔 Python金字塔

托倫,函式中有幾個小錯誤和乙個邏輯問題print y to a 請注意,此函式生成乙個以z開頭的字串,但您希望將字串以相反的方向連線,而您的另乙個函式print a to y 確實停止了 1位置 例如 還要注意,您需要新增新行字元 n 以獲得一些不錯的輸出。在 我的解決方案是 def print a...

字母金字塔(類同數字金字塔)

問題描述 讓程式要求使用者輸入乙個大寫字母,使用巢狀迴圈產生像下面這樣的金字塔圖案 aaba abcba abcdba abcdecba 演算法分析 每行包括三個部分內容 若干個空格 正序排列的字母 倒序排列的字幕。使用乙個外部迴圈來處理行,在每乙個行中使用三個內部迴圈 乙個處理空格,乙個以公升序列...

數字金字塔

觀察下面的數字金字塔。寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。7 3 8 8 1 0 2 7 4 4 4 5 2 6 5在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大 多組輸入資料 第乙個行包含 r...