亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? imagemanip.c

?? 指紋識別 C代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*############################################################################# * 文件名:imagemanip.c * 功能:  實現(xiàn)了主要的圖像處理操作 * modified by  PRTsinghua@hotmail.com#############################################################################*/#include <math.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#include "imagemanip.h"#ifndef min#define min(a,b) (((a)<(b))?(a):(b))#endif/* 宏定義 */#define PIJKL p[i+k + (j+l)*nSizeX]/******************************************************************************  * 功能:圖像縮放操作  * 參數(shù):image       指紋圖像  *       size        縮放的圖像塊大小  *       tolerance   消去直方圖的邊界  * 返回:錯誤編號******************************************************************************/FvsError_t ImageLocalStretch(FvsImage_t image, const FvsInt_t size, 						const FvsInt_t tolerance){    /* 定義一些變量 */    int nSizeX = ImageGetWidth(image)  - size + 1;    int nSizeY = ImageGetHeight(image) - size + 1;    FvsInt_t i, j, t, l;    FvsInt_t sum, denom;    FvsByte_t a = 0;    FvsInt_t k = 0;    FvsByte_t b = 255;    int hist[256];    FvsByte_t* p = ImageGetBuffer(image);    if (p==NULL)    	return FvsMemory;    for (j=0; j < nSizeY; j+=size)    {        for (i=0; i < nSizeX; i+=size)        {            /* 計算直方圖 */            memset(hist, 0, 256*sizeof(int));            for (l = 0; l<size; l++)                for (k = 0; k<size; k++)                    hist[PIJKL]++;                        /* 伸縮 */            for (k=0,   sum=0;   k <256; k++)            {                sum+=hist[k];                a = (FvsByte_t)k;                if (sum>tolerance) break;            }                        for (k=255, sum=0; k >= 0; k--)            {                sum+=hist[k];                b = (FvsByte_t)k;                if (sum>tolerance) break;            }            denom = (FvsInt_t)(b-a);            if (denom!=0)            {                for (l = 0; l<size; l++)                {                    for (k = 0; k<size; k++)                    {                        if (PIJKL<a) PIJKL = a;                        if (PIJKL>b) PIJKL = b;                        t = (FvsInt_t)((((PIJKL)-a)*255)/denom);                        PIJKL = (FvsByte_t)(t);                    }                }            }        }    }    return FvsOK;}#define P(x,y)      ((int32_t)p[(x)+(y)*pitch])/******************************************************************************** 估算脊線的方向** 給定一個歸一化的指紋圖像,算法的主要步驟如下:**** 1 - 將G分成大小為 w x w - (15 x 15) 的塊;**** 2 - 計算每個象素 (i,j)的梯度 dx(i,j) 和 dy(i,j) ,**     根據(jù)計算的需求,梯度算子可以從簡單的Sobel算子到復雜的Marr-Hildreth 算子。**** 3 - 估算優(yōu)勢方向(i,j), 使用如下的操作:****               i+w/2 j+w/2**               ---   --- **               \     \**     Nx(i,j) =  --    -- 2 dx(u,v) dy(u,v)**               /     /**               ---   ---**            u=i-w/2 v=j-w/2****               i+w/2 j+w/2**               ---   --- **               \     \**     Ny(i,j) =  --    -- dx(u,v) - dy(u,v)**               /     /**               ---   ---**            u=i-w/2 v=j-w/2****                  1    -1  / Nx(i,j) \**     Theta(i,j) = - tan   |  -------  |**                  2        \ Ny(i,j) /****     這里,Theta(i,j)是局部脊線方向的最小方差估計,以像素 (i,j) 為中心。**     從數(shù)學的角度看,它代表傅立葉頻譜中直角占有時的方向。**** 4 - 由于有噪聲,脊線的中斷,細節(jié)點等等的存在,在輸入圖像中,對局部脊線**     方向的估計并不總是正確的。由于局部脊線方向變化緩慢,所以可以用低通**     濾波器來修正不正確的脊線方向。為了運用低通濾波器,方向圖必須轉換成**     連續(xù)的矢量域,定義如下:**       Phi_x(i,j) = cos( 2 x theta(i,j) )**       Phi_y(i,j) = sin( 2 x theta(i,j) )**     在矢量域,可以用如下的卷積低通濾波:**       Phi2_x(i,j) = (W @ Phi_x) (i,j)**       Phi2_y(i,j) = (W @ Phi_y) (i,j)**     W是一個二維的低通濾波器。**** 5 - 用如下公式計算 (i,j) 處的方向:****              1    -1  / Phi2_y(i,j) \**     O(i,j) = - tan   |  -----------  |**              2        \ Phi2_x(i,j) /**** 用這個算法可以得到相當平滑的方向圖***/static FvsError_t FingerprintDirectionLowPass(FvsFloat_t* theta, 					FvsFloat_t* out, FvsInt_t nFilterSize, 					FvsInt_t w, FvsInt_t h){    FvsError_t nRet = FvsOK;    FvsFloat_t* filter = NULL;    FvsFloat_t* phix   = NULL;    FvsFloat_t* phiy   = NULL;    FvsFloat_t* phi2x  = NULL;    FvsFloat_t* phi2y  = NULL;    FvsInt_t fsize  = nFilterSize*2+1;    size_t nbytes = (size_t)(w*h*sizeof(FvsFloat_t));    FvsFloat_t nx, ny;    FvsInt_t val;    FvsInt_t i, j, x, y;    filter= (FvsFloat_t*)malloc((size_t)fsize*fsize*sizeof(FvsFloat_t));    phix  = (FvsFloat_t*)malloc(nbytes);    phiy  = (FvsFloat_t*)malloc(nbytes);    phi2x = (FvsFloat_t*)malloc(nbytes);    phi2y = (FvsFloat_t*)malloc(nbytes);    if (filter==NULL || phi2x==NULL || phi2y==NULL || phix==NULL || phiy==NULL)        nRet = FvsMemory;    else    {        /* 置 0 */        memset(filter, 0, (size_t)fsize*fsize*sizeof(FvsFloat_t));        memset(phix,   0, nbytes);        memset(phiy,   0, nbytes);        memset(phi2x,  0, nbytes);        memset(phi2y,  0, nbytes);        /* 步驟4 */        for (y = 0; y < h; y++)        for (x = 0; x < w; x++)        {            val = x+y*w;            phix[val] = cos(theta[val]);            phiy[val] = sin(theta[val]);        }        /* 構造低通濾波器 */        nx = 0.0;        for (j = 0; j < fsize; j++)        for (i = 0; i < fsize; i++)        {            filter[j*fsize+i] = 1.0;            nx += filter[j*fsize+i]; /* 系數(shù)和 */        }        if (nx>1.0)        {            for (j = 0; j < fsize; j++)            for (i = 0; i < fsize; i++)                /* 歸一化結果 */                filter[j*fsize+i] /= nx;        }        /* 低通濾波 */        for (y = 0; y < h-fsize; y++)        for (x = 0; x < w-fsize; x++)        {            nx = 0.0;            ny = 0.0;            for (j = 0; j < fsize; j++)            for (i = 0; i < fsize; i++)            {                val = (x+i)+(j+y)*w;                nx += filter[j*fsize+i]*phix[val];                ny += filter[j*fsize+i]*phiy[val];            }            val = x+y*w;            phi2x[val] = nx;            phi2y[val] = ny;        }        /* 銷毀 phix, phiy */        if (phix!=NULL)         {         	free(phix);         	phix=NULL;         }        if (phiy!=NULL)         {         	free(phiy);         	phiy=NULL;         }        /* 步驟5 */        for (y = 0; y < h-fsize; y++)        for (x = 0; x < w-fsize; x++)        {            val = x+y*w;            out[val] = atan2(phi2y[val], phi2x[val])*0.5;        }    }    if (phix!=NULL)  free(phix);    if (phiy!=NULL)  free(phiy);    if (phi2x!=NULL) free(phi2x);    if (phi2y!=NULL) free(phi2y);    if (filter!=NULL)free(filter);    return nRet;}/******************************************************************************  * 功能:計算指紋圖像脊線的方向。          該算法在許多論文中都有描述,如果圖像做了歸一化,并且對比度較高,          則最后的處理效果也較好。          方向的值在-PI/2和PI/2之間,弧度和脊并不相同。          選取的塊越大,分析的效果也越好,但所需的處理計算時間也越長。          由于指紋圖像中脊線方向的變化比較緩慢,所以低通濾波器可以較好的          過慮掉方向中的噪聲和錯誤。  * 參數(shù):image          指向圖像對象的指針  *       field          指向浮點域對象的指針,保存結果  *       nBlockSize     塊大小  *       nFilterSize    濾波器大小  * 返回:錯誤編號******************************************************************************/FvsError_t FingerprintGetDirection(const FvsImage_t image, 						FvsFloatField_t field, const FvsInt_t nBlockSize, 						const FvsInt_t nFilterSize){    /* 輸入圖像的寬度和高度 */    FvsInt_t w       = ImageGetWidth (image);    FvsInt_t h       = ImageGetHeight(image);    FvsInt_t pitch   = ImageGetPitch (image);    FvsByte_t* p     = ImageGetBuffer(image);    FvsInt_t i, j, u, v, x, y;    FvsFloat_t dx[(nBlockSize*2+1)][(nBlockSize*2+1)];    FvsFloat_t dy[(nBlockSize*2+1)][(nBlockSize*2+1)];    FvsFloat_t nx, ny;    FvsFloat_t* out;    FvsFloat_t* theta  = NULL;    FvsError_t nRet = FvsOK;    /* 輸出圖像 */    nRet = FloatFieldSetSize(field, w, h);    if (nRet!=FvsOK) return nRet;    nRet = FloatFieldClear(field);    if (nRet!=FvsOK) return nRet;    out = FloatFieldGetBuffer(field);    /* 為方向數(shù)組申請內(nèi)存 */    if (nFilterSize>0)    {        theta = (FvsFloat_t*)malloc(w * h * sizeof(FvsFloat_t));        if (theta!=NULL)            memset(theta, 0, (w * h * sizeof(FvsFloat_t)));    }    /* 內(nèi)存錯誤,返回 */    if (out==NULL || (nFilterSize>0 && theta==NULL))        nRet = FvsMemory;    else    {        /* 1 - 圖像分塊 */        for (y = nBlockSize+1; y < h-nBlockSize-1; y++)        for (x = nBlockSize+1; x < w-nBlockSize-1; x++)        {            /* 2 - 計算梯度 */            for (j = 0; j < (nBlockSize*2+1); j++)            for (i = 0; i < (nBlockSize*2+1); i++)            {                dx[i][j] = (FvsFloat_t)                           (P(x+i-nBlockSize,   y+j-nBlockSize) -                            P(x+i-nBlockSize-1, y+j-nBlockSize));                dy[i][j] = (FvsFloat_t)                           (P(x+i-nBlockSize,   y+j-nBlockSize) -                            P(x+i-nBlockSize,   y+j-nBlockSize-1));            }            /* 3 - 計算方向 */            nx = 0.0;            ny = 0.0;            for (v = 0; v < (nBlockSize*2+1); v++)            for (u = 0; u < (nBlockSize*2+1); u++)            {                nx += 2 * dx[u][v] * dy[u][v];                ny += dx[u][v]*dx[u][v] - dy[u][v]*dy[u][v];            }            /* 計算角度 (-pi/2 .. pi/2) */            if (nFilterSize>0)                theta[x+y*w] = atan2(nx, ny);            else                out[x+y*w] = atan2(nx, ny)*0.5;        }        if (nFilterSize>0)            nRet = FingerprintDirectionLowPass(theta, out, nFilterSize, w, h);    }    if (theta!=NULL) free(theta);    return nRet;}/* 指紋頻率域 *//******************************************************************************** 這個步驟里,我們估計指紋脊線的頻率。在局部鄰域里,沒有凸現(xiàn)的細節(jié)點或者孤點,** 沿著脊線和谷底,可以用一個正弦曲線波形作為模型,因此,局部脊線頻率是指紋圖** 像的另一個本質(zhì)的特征。對指紋圖像G進行歸一化,O是其方向圖,估算局部脊線頻率** 的步驟如下:**** 1 - 圖像分塊 w x w - (16 x 16)**** 2 - 對每塊,計算大小為l x w (32 x 16)的方向圖窗口**** 3 - 對中心在 (i,j) 的每塊, 計算脊線和谷底的 x-signature**     X[0], X[1], ... X[l-1] 采用如下公式:****              --- w-1**            1 \**     X[k] = -  --  G (u, v), k = 0, 1, ..., l-1**            w /**              --- d=0****     u = i + (d - w/2).cos O(i,j) + (k - l/2).sin O(i,j)****     v = j + (d - w/2).sin O(i,j) - (k - l/2).cos O(i,j)****     如果方向圖窗口中沒有細節(jié)點和孤立的點,則x-signature形成了一個離散**     的正弦曲線波,與方向圖中脊線和谷底的頻率一樣。因此,脊線和谷底的**     頻率可以由x-signature來估計。設T(i,j)是兩個峰頂?shù)钠骄嚯x,則頻率**     OHM(i,j)可以這樣計算:OHM(i,j) = 1 / T(i,j)。****     如果沒有兩個連續(xù)的峰頂,則頻率置為-1,說明其無效。**** 4 - 對于一個指紋圖像而言,脊線頻率的值在一個范圍之內(nèi)變動,比如說對于500**     dpi的圖像,變動范圍為[1/3, 1/25],因此,如果估計出的頻率不在這個范**     圍內(nèi),說明頻率估計無效,同意置為-1。**** 5 - 如果某塊有斷點或者細節(jié)點,則不會有正弦曲線,其頻率可以由鄰塊的頻率**     插值估計(比如說高斯函數(shù),均值為0,方差為9,寬度為7)。**** 6 - 脊線內(nèi)部距離變化緩慢,可以用低通濾波器***//* 寬度 */#define BLOCK_W     16#define BLOCK_W2     8/* 長度 */#define BLOCK_L     32#define BLOCK_L2    16#define EPSILON     0.0001#define LPSIZE      3#define LPFACTOR    (1.0/((LPSIZE*2+1)*(LPSIZE*2+1)))FvsError_t FingerprintGetFrequency(const FvsImage_t image, const FvsFloatField_t direction,           FvsFloatField_t frequency){    /* 輸入圖像的寬度和高度 */    FvsError_t nRet = FvsOK;    FvsInt_t w      = ImageGetWidth (image);    FvsInt_t h      = ImageGetHeight(image);    FvsInt_t pitchi = ImageGetPitch (image);    FvsByte_t* p    = ImageGetBuffer(image);    FvsFloat_t* out;    FvsFloat_t* freq;    FvsFloat_t* orientation = FloatFieldGetBuffer(direction);    FvsInt_t x, y, u, v, d, k;    size_t size;    if (p==NULL)        return FvsMemory;    /* 輸出圖像的內(nèi)存申請 */    nRet = FloatFieldSetSize(frequency, w, h);    if (nRet!=FvsOK) return nRet;    (void)FloatFieldClear(frequency);    freq = FloatFieldGetBuffer(frequency);    if (freq==NULL)        return FvsMemory;    /* 輸出的內(nèi)存申請 */    size = w*h*sizeof(FvsFloat_t);    out  = (FvsFloat_t*)malloc(size);    if (out!=NULL)    {        FvsFloat_t dir = 0.0;        FvsFloat_t cosdir = 0.0;        FvsFloat_t sindir = 0.0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人激情社区| 色妞www精品视频| 久久国产三级精品| 捆绑调教一区二区三区| 免费观看一级欧美片| 老司机精品视频导航| 精品一区二区三区在线播放| 热久久免费视频| 国产真实乱对白精彩久久| 国内不卡的二区三区中文字幕 | 亚洲一区二区五区| 亚洲免费在线电影| 亚洲国产精品尤物yw在线观看| 亚洲图片欧美综合| 石原莉奈一区二区三区在线观看| 天天影视涩香欲综合网| 免费在线看一区| 国产一区二区三区美女| 成人黄色在线看| 在线观看一区二区视频| 在线不卡一区二区| 精品日韩在线观看| 国产精品进线69影院| 亚洲综合999| 老司机精品视频线观看86| 国产高清精品网站| 在线免费不卡视频| 日韩一区二区免费在线观看| 久久久久久免费毛片精品| 国产精品久久久久三级| 亚洲已满18点击进入久久| 日韩av一区二| 夫妻av一区二区| 精品视频一区二区三区免费| 日韩欧美国产1| 亚洲视频一区二区在线观看| 婷婷久久综合九色综合绿巨人| 国产在线精品不卡| 一本大道久久精品懂色aⅴ| 日韩一区二区在线看| 国产精品久久久久三级| 日韩影院精彩在线| www.色精品| 日韩亚洲欧美一区| 1000精品久久久久久久久| 天天色天天爱天天射综合| 国产91高潮流白浆在线麻豆| 欧美中文字幕一二三区视频| www成人在线观看| 亚洲黄色小说网站| 国产福利91精品| 欧美日韩成人综合| 亚洲素人一区二区| 精品夜夜嗨av一区二区三区| 色狠狠一区二区三区香蕉| 欧美精品一区二区在线观看| 亚洲美女视频一区| 国产在线视频不卡二| 欧美性猛交xxxxxxxx| 国产亚洲1区2区3区| 男女男精品视频| 色呦呦一区二区三区| 国产午夜精品福利| 蜜桃av一区二区在线观看| 色哟哟欧美精品| 国产视频一区在线播放| 日韩av一二三| 欧美丝袜丝交足nylons图片| 国产精品全国免费观看高清| 欧美a级一区二区| 色婷婷综合视频在线观看| 中文字幕av一区二区三区免费看 | 亚洲综合免费观看高清在线观看 | 精品第一国产综合精品aⅴ| 亚洲综合色区另类av| jiyouzz国产精品久久| 26uuu精品一区二区在线观看| 午夜视频在线观看一区二区| www.日韩在线| 国产精品免费观看视频| 国产在线一区观看| 精品少妇一区二区三区在线播放| 亚洲国产精品久久一线不卡| 色婷婷激情综合| 亚洲日本一区二区三区| 夫妻av一区二区| 国产欧美中文在线| 国产一区二区三区免费看| 精品国产乱码久久久久久老虎| 偷拍一区二区三区四区| 欧美日韩国产小视频| 亚洲国产欧美在线| 欧美日韩在线三区| 亚洲电影第三页| 欧美日韩免费视频| 亚洲午夜视频在线| 欧美男同性恋视频网站| 午夜久久福利影院| 欧美日韩日日夜夜| 日韩高清不卡一区二区三区| 欧美日韩一区二区三区四区五区| 亚洲一线二线三线久久久| 在线观看亚洲精品视频| 亚洲精品你懂的| 欧美中文字幕一区二区三区亚洲| 亚洲影院免费观看| 欧美日韩黄色一区二区| 五月婷婷久久丁香| 欧美一区二区三区白人 | 91精品国产欧美一区二区18| 午夜精品一区在线观看| 欧美一级片在线| 久久99国产乱子伦精品免费| 久久嫩草精品久久久精品一| 国产福利精品一区二区| 国产精品久久久久久久午夜片| 不卡一区二区中文字幕| 亚洲欧美一区二区不卡| 欧美视频一区二| 青青草原综合久久大伊人精品优势| 日韩午夜av一区| 国产精品77777竹菊影视小说| 欧美—级在线免费片| 91香蕉视频mp4| 亚洲777理论| 精品国产91洋老外米糕| 成人一二三区视频| 有码一区二区三区| 69堂国产成人免费视频| 国产在线一区二区| 亚洲欧美精品午睡沙发| 欧美精品免费视频| 国产剧情一区二区| 亚洲综合999| 久久伊99综合婷婷久久伊| av在线综合网| 日韩中文字幕1| 久久精品一区二区三区不卡牛牛| 色哟哟一区二区在线观看| 蜜臀av性久久久久av蜜臀妖精| 久久九九国产精品| 欧美日韩精品一区二区三区蜜桃| 久久激情五月婷婷| 亚洲视频一区二区在线| 日韩欧美的一区| 色综合久久久久综合| 玖玖九九国产精品| 亚洲卡通欧美制服中文| 亚洲精品在线一区二区| 91色在线porny| 久久99精品久久久久久动态图 | 国精品**一区二区三区在线蜜桃| 中文字幕一区二区在线播放 | 五月综合激情日本mⅴ| 久久久久久久久伊人| 欧美色图免费看| 国产成人综合网| 日韩精品三区四区| 亚洲老妇xxxxxx| 国产欧美一区二区精品性| 欧美久久免费观看| 99国产精品视频免费观看| 蜜桃av噜噜一区二区三区小说| 中文字幕在线观看不卡| 欧美变态tickle挠乳网站| 色综合久久久久| 丰满少妇在线播放bd日韩电影| 青青草97国产精品免费观看无弹窗版| 亚洲欧美综合另类在线卡通| 精品国产区一区| 91精品国产综合久久精品性色| 99久久久久免费精品国产| 黑人巨大精品欧美一区| 五月婷婷综合激情| 亚洲欧美激情在线| 国产精品对白交换视频| 久久精品在这里| 日韩欧美专区在线| 欧美日韩一区二区在线观看 | 丁香一区二区三区| 奇米四色…亚洲| 亚洲第四色夜色| 一区二区日韩电影| 国产精品久久久一区麻豆最新章节| 2014亚洲片线观看视频免费| 欧美视频日韩视频在线观看| 99久久伊人久久99| 国产99久久久国产精品潘金网站| 美女精品自拍一二三四| 午夜精品福利久久久| 日韩美女精品在线| 国产人久久人人人人爽| 久久这里只有精品视频网| 欧美一级高清片| 日韩一区二区三| 日韩欧美综合一区| 日韩欧美精品三级| 精品国产一区久久| 精品少妇一区二区三区免费观看 | 亚洲一二三四久久|