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

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

?? 圖像處理.txt

?? 用數字圖像處理主要是為了修改圖形,改善圖像質量,或是從圖像中提起有效信息,還有利用數字圖像處理可以對圖像進行體積.
?? TXT
?? 第 1 頁 / 共 4 頁
字號:
        }

    }

    MaxGrayNum=0;

    MinGrayNum=65535;

    for(grayindex=0;grayindex<256;grayindex++){

        temp=GrayTable[grayindex];

        if(temp>MaxGrayNum)

            MaxGrayNum=temp; //找到更大的了

        if( (temp<MinGrayNum) && (temp>0) )

            MinGrayNum=temp; //找 到更小的了

    }

    GlobalUnlock(hImgData);

    //產生新的窗口顯示結果

hPopupWnd = CreateWindow ("PopupWindowClass",

"Histogram Statistic Window",WS_OVERLAPPEDWINDOW,50,80,550,350,             hWnd,NULL,ghInst,NULL);

    if (hPopupWnd){

        ShowWindow (hPopupWnd, SW_SHOW);

        UpdateWindow (hPopupWnd);

   }

    return TRUE;

}

下面是新窗口的消息處理函數

long FAR PASCAL PopupWndProc (HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)

{

    HDC             hdc;

    PAINTSTRUCT     ps;   

    DWORD          i;

    int              xstart;   

    static LOGPEN    blp={PS_SOLID,1,1,RGB(0,0,255)}; //藍色畫筆

    HPEN           bhp; //畫筆句柄

    float            a,b,temp;

    char            str[10];

    //計算上面所說的a,b的值

    a=(float)(265.0 /( MaxGrayNum - MinGrayNum) );

    b=(float) (270.0-a* MaxGrayNum);

    switch (message)

        {

    case WM_PAINT:

        hdc = BeginPaint(hWnd, &ps);

        bhp = CreatePenIndirect(&blp);

        SelectObject(hdc,bhp);

        MoveToEx(hdc,2,270,NULL);

        LineTo(hdc,518,270); //先畫一條水平線

        xstart=2;

        for(i=0;i<256;i++){

            MoveToEx(hdc,xstart,270,NULL);

            if (GrayTable[i]!=0) 

                temp=(float)(a*GrayTable[i]+b);

            else temp=0.0f;  //如果灰度出現的次數是零,則不畫線

            LineTo(hdc,xstart,270-(int)temp); //畫出該灰度的計數值

            if (i%16 ==0){ //畫出標尺,每16個一格

                MoveToEx(hdc,xstart,270,NULL);

                LineTo(hdc,xstart,280);

                _itoa(i,str,10);

                TextOut(hdc,xstart,285,str,strlen(str));

            }

            xstart+=2;

        }

        MoveToEx(hdc,xstart,270,NULL);

        LineTo(hdc,xstart,280);

        TextOut(hdc,xstart,285,"256",strlen("256"));

        EndPaint(hWnd,&ps); 

        DeleteObject(bhp);

        break;

    default:

        break;

        }   

    return DefWindowProc (hWnd, message, wParam, lParam);

}

 

9.灰度直方圖均衡化(histogram equalization)

    在介紹灰度直方圖均衡化之前,先講講直方圖修正。所謂直方圖修正,就是通過一個灰度映射函數Gnew=F(Gold),將原灰度直方圖改造成你所希望的直方圖。所以,直方圖修正的關鍵就是灰度映射函數。我們剛才介紹的閾值化,削波,灰度窗口變換等等,都是灰度映射函數。

    直方圖均衡化是一種最常用的直方圖修正。它是把給定圖象的直方圖分布改造成均勻直方圖分布。由信息學的理論來解釋,具有最大熵(信息量)的圖象為均衡化圖象。直觀地講,直方圖均衡化導致圖象的對比度增加。

    由于直方圖均衡化涉及到很多概率和數學的知識,具體的細節這里就不介紹了,只給出算法。通過下面的例題,就很容易明白了。

    有一幅圖象,共有16級灰度,其直方圖分布為Pi, i=0,1,…15,求經直方圖均衡化后,量化級別為10級的灰度圖象的直方圖分布Qi ,其中Pi和Qi為分布的概率,即灰度i出現的次數與總的點數之比。

Pi:0.03,0, 0.06,0.10,0.20, 0.11,0,0,0,0.03,0,0.06,0.10,0.20,0.11,0

步驟1:用一個數組s記錄Pi,即s[0]=0.03;s[1]=0;s[2]=0.06…s[14]=0.11;s[15]=0

步驟2:i從1開始,令s[i]=s[i]+s[i-1] , 得到的結果是

s: 0.03,0.03,0.09,0.19,0.39,0.50,0.50,0.50,0.50,0.53,0.53,0.59,0.69,

0.89,1.0,1.0

步驟3:用一個數組L記錄新的調色板索引值,即令L[i]=s[i]*(10-1) ,得到的結果是L:0,0,1,2,4,5,5,5,5,5,5,5,6,8,9,9

這樣就找到了原來的調色板索引值和新的調色板索引值之間的對應關系,即0->0;1->0;2->1;3->2;4->4;5->5;6->5;7->5;8->5;9->5;10->5;11->5;12->6;13->8;14->9;15->9

步驟4:將老的索引值對應的概率合并,作為對應的新的索引值的概率。例如,原來的索引值0,1都對應了新的索引值0,則灰度索引值為0的概率為P0+P1=0.03;新的索引值3和7找不到老的索引值與之對應,所以令Q3和Q7為0。最后得到的結果是

Qi:0.03,0.06,0.10,0,0.20,0.20,0.10,0,0.20,0.11

圖17為Pi的分布,圖18為Qi的分布,對照一下,不難發現圖18的分布比圖17要均勻一些。

                      圖17. Pi的分布                   圖18. Qi的分布

 

要注意的是,均衡化處理后的圖象只能是近似均勻分布。均衡化圖象的動態范圍擴大了,但其本質是擴大了量化間隔,而量化級別反而減少了,因此,原來灰度不同的像素經處理后可能變的相同,形成了一片的相同灰度的區域,各區域之間有明顯的邊界,從而出現了偽輪廓。

圖19為圖13經直方圖均衡化處理后,量化為128級灰度的結果,圖20為它的直方圖分布。為什么天亮了起來呢?分析一下就明白了:因為原圖中低灰度的點太多了,所以s數組前面的元素很大,經過L[i]=s[i]*(128-1)的處理后,原圖中低灰度的點的灰度值提高了不少,所以那片暗區變亮了。同時可以看出,天空中出現了偽輪廓。

                                                    

圖19. 圖13經直方圖均衡化處理后的結果

        
圖20. 它的灰度直方圖

圖21為圖1直方圖均衡化后的結果(128級灰度),暗的區域(手)變亮了,看起來更清楚一些。

                              

圖21. 圖1直方圖均衡化后的結果

下面給出直方圖均衡化的源程序

int EquaScale; //為新的灰度級別

BOOL HistogramEqua(HWND hWnd)

{

    DLGPROC              dlgInputBox = NULL;

    DWORD                BufSize,OffBits;

    LPBITMAPINFOHEADER lpImgData;

    LPSTR                 lpPtr;

    HLOCAL               hTempImgData;

    LPBITMAPINFOHEADER lpTempImgData;

    LPSTR                 lpTempPtr;

    HDC                   hDc;

    HFILE                 hf;

    LONG                 x,y;

    LOGPALETTE          *pPal;

    HPALETTE             hPrevPalette; 

    HLOCAL              hPal;

    WORD                i;

    int                   Gray;

    DWORD               GrayHits[256];

    int                   GrayIndex[256];

    float                   s[256];

 

    if( NumColors!=256){ //必須是256級灰度圖

        MessageBox(hWnd,"Must be a 256 grayscale bitmap!","Error Message",MB_OK|

MB_ICONEXCLAMATION);

        return FALSE;

}

//出現對話框,輸入新的灰度級別

    dlgInputBox = (DLGPROC) MakeProcInstance ( (FARPROC)InputBox, ghInst );

    DialogBox (ghInst, "INPUTBOX", hWnd, dlgInputBox);

    FreeProcInstance ( (FARPROC) dlgInputBox );

    if( EquaScale >=255){ //量化級別不能大于255

        MessageBox(hWnd,"The new scale can not be larger than 255","Error Message",

MB_OK|MB_ICONEXCLAMATION);

        return FALSE;

    }

    //OffBits為到實際位圖數據的偏移值

    OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);

//BufSize為緩沖區的大小

    BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);

    if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)

    {

        MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK|

MB_ICONEXCLAMATION);

        return FALSE;

}

//lpImgData指向原圖,//lpTempImgData指向新開的緩沖區

    lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);    

    lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);

    //拷貝頭信息

    memcpy(lpTempImgData,lpImgData,OffBits);

//ColorHits為記錄顏色使用頻率的數組,ColorIndex為記錄顏色索引值的數組

    //先清零

    memset(GrayHits,0,256*sizeof(DWORD));

    memset(GrayIndex,0,256*sizeof(WORD));

    for(y=0;y<bi.biHeight;y++){

        lpPtr=(unsigned char *)lpImgData+(BufSize-LineBytes-y*LineBytes);

        for(x=0;x<bi.biWidth;x++){

            Gray=(unsigned char )*(lpPtr++);

            GrayHits[Gray]++; //統計該顏色用到的次數

        }

    }

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

//次數除以總點數得到頻率    

    

    s[i]=(float)GrayHits[i]/((float)bi.biWidth*(float)bi.biHeight); 

for(i=1;i<256;i++)

        s[i]+=s[i-1];  //每一項都是前面所有項的累加

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

        GrayIndex[i]=(int)(s[i]*(EquaScale-1)); //根據新的量化級別,計算新的灰//度索引值

    //為新的調色板分配內存

    hPal=LocalAlloc(LHND,sizeof(LOGPALETTE) + 256* sizeof(PALETTEENTRY));

pPal =(LOGPALETTE *)LocalLock(hPal);

//先將調色板內存全部清零

    memset(pPal,0,sizeof(LOGPALETTE) + 256* sizeof(PALETTEENTRY));

    pPal->palNumEntries =(WORD) 256;

    pPal->palVersion    = 0x300;

    lpTempPtr=(char *)lpTempImgData+sizeof(BITMAPINFOHEADER);

    for (i = 0; i < EquaScale; i++) {

        Gray=(int)(i*255.0/(EquaScale-1));  //根據新的量化級別,計算新的灰度值

        pPal->palPalEntry[i].peRed=(BYTE)Gray;

        pPal->palPalEntry[i].peGreen=(BYTE)Gray;

        pPal->palPalEntry[i].peBlue=(BYTE)Gray;

        pPal->palPalEntry[i].peFlags=(BYTE)0;

        *(lpTempPtr++)=(unsigned char)Gray;

        *(lpTempPtr++)=(unsigned char)Gray;

        *(lpTempPtr++)=(unsigned char)Gray;

        *(lpTempPtr++)=0;

    }

    if(hPalette!=NULL)                     

        DeleteObject(hPalette);

    //產生新的邏輯調色板

    hPalette=CreatePalette(pPal);

    LocalUnlock(hPal);

    LocalFree(hPal);

    hDc=GetDC(hWnd);

    if(hPalette){

        hPrevPalette=SelectPalette(hDc,hPalette,FALSE);

        RealizePalette(hDc);

    }

    for(y=0;y<bi.biHeight;y++){

        lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);

        lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);

        for(x=0;x<bi.biWidth;x++){

            Gray=(unsigned char )*(lpPtr++); //原灰度索引值

            Gray=GrayIndex[Gray]; //對應的新的灰度索引值

            *(lpTempPtr++)=(unsigned char)Gray;

        }

    }

    if(hBitmap!=NULL)

        DeleteObject(hBitmap);

    //產生新的位圖  

    hBitmap=CreateDIBitmap(hDc, (LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT,(LPSTR)lpTempImgData+sizeof(BITMAPINFOHEADER) 

+256*sizeof(RGBQUAD),(LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS);

    if(hPalette && hPrevPalette){

        SelectPalette(hDc,hPrevPalette,FALSE);

        RealizePalette(hDc);

    }

    hf=_lcreat("c:\\equa.bmp",0);

    _lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER)); 

    _lwrite(hf,(LPSTR)lpTempImgData,BufSize);

    _lclose(hf);

    //釋放內存和資源

    ReleaseDC(hWnd,hDc);

    LocalUnlock(hTempImgData);

    LocalFree(hTempImgData);

    GlobalUnlock(hImgData);

    return TRUE;

}

注意事項:

source5目錄下為本章介紹的源程序,功能是直方圖修正和彩色變換.

運行時,文件c:\test.bmp必須存在

 

命令行編譯過程如下

vcvars32

rc bmp.rc

cl colorope.c bmp.res user32.lib gdi32.lib

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费在线播放视频| 美女在线观看视频一区二区| 欧美第一区第二区| 2020国产精品久久精品美国| 制服丝袜中文字幕亚洲| 91精品国产一区二区三区| 欧美老年两性高潮| 精品三级在线观看| 中文字幕亚洲一区二区av在线| 亚洲国产精品成人综合色在线婷婷| 久久久高清一区二区三区| 欧美国产日韩一二三区| 日韩理论片一区二区| 偷偷要91色婷婷| 国产高清精品在线| 欧美日韩视频在线第一区 | 欧美精品久久久久久久多人混战 | 国产一区二区三区日韩| 成人国产精品免费| 欧美肥大bbwbbw高潮| 国产精品短视频| 久久精品国产在热久久| 色婷婷国产精品久久包臀| 精品国产三级a在线观看| 亚洲欧洲在线观看av| 日本成人超碰在线观看| 亚洲图片欧美视频| 久久不见久久见免费视频1| 91首页免费视频| 欧美一区二区视频在线观看2022| 91麻豆精品国产91久久久久久久久 | 久久精品男人天堂av| 亚洲成av人在线观看| 欧美三级午夜理伦三级中视频| 精品sm捆绑视频| 国产成人日日夜夜| 久久久蜜桃精品| 大桥未久av一区二区三区中文| 日韩美女天天操| 国产精品一区二区黑丝| 精品国产露脸精彩对白| 国产一区在线看| 国产欧美日韩三区| 色综合中文综合网| 欧美日韩成人一区| 国产精品萝li| 国产激情一区二区三区| 视频一区中文字幕国产| 欧美熟乱第一页| 人妖欧美一区二区| 亚洲国产成人一区二区三区| 成人免费毛片嘿嘿连载视频| 亚洲精品日日夜夜| 日韩欧美一级片| 日本久久精品电影| 日本女人一区二区三区| 337p粉嫩大胆噜噜噜噜噜91av| 国产成人aaaa| 亚洲mv大片欧洲mv大片精品| 久久久久久电影| 欧美一区二区三区思思人| 91女人视频在线观看| 国产乱人伦精品一区二区在线观看| 亚洲国产成人一区二区三区| 日韩欧美中文字幕制服| 欧美视频第二页| 日本韩国一区二区三区视频| 国产原创一区二区三区| 久久电影网站中文字幕| 日韩av电影免费观看高清完整版| 成人欧美一区二区三区小说 | 国产一区二区三区免费在线观看 | 不卡高清视频专区| 国产电影精品久久禁18| 久久成人羞羞网站| 国产精品一区久久久久| 精品一区二区三区在线播放 | 美女一区二区久久| 激情五月激情综合网| 国内精品嫩模私拍在线| 国产精品一区二区久久不卡| 国产一区二区精品久久99| 黄色精品一二区| eeuss鲁片一区二区三区| 国产精品12区| 欧美乱熟臀69xxxxxx| 日韩欧美久久久| 国产欧美一区二区精品婷婷| 国产精品精品国产色婷婷| 国产精品欧美极品| 国产精品人成在线观看免费| 国产亚洲人成网站| 亚洲人123区| 国产一区美女在线| 欧美日韩中文一区| 综合激情成人伊人| 久久99久久99小草精品免视看| 成人精品gif动图一区| 精品福利一二区| 日韩国产高清影视| 欧美三级日韩三级| 国产精品久久久久久久久动漫 | 日韩精品一级中文字幕精品视频免费观看 | 成人在线视频首页| 欧美体内she精高潮| 中文字幕av不卡| 国产不卡一区视频| 国产精品女人毛片| 国产在线精品国自产拍免费| av一区二区不卡| 久久精品人人做| 国产成人精品三级麻豆| www久久久久| 国产大陆亚洲精品国产| 国产精品网站在线| 日本久久电影网| 亚洲国产成人91porn| 欧美一区二区三区影视| 午夜天堂影视香蕉久久| 欧美色爱综合网| 免费成人深夜小野草| 久久亚洲一区二区三区四区| 国产精品中文字幕一区二区三区| www久久久久| 欧美乱妇15p| 成人午夜精品在线| 亚洲午夜三级在线| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产午夜精品久久| 欧美色图免费看| 夫妻av一区二区| 久久久精品欧美丰满| 欧美综合一区二区| 成人av网址在线观看| 免费在线观看视频一区| 中文字幕一区二区三区蜜月| 欧美成人福利视频| 欧美视频一区二区三区四区| 国产精品一品二品| 精品中文av资源站在线观看| 亚洲乱码中文字幕| 综合自拍亚洲综合图不卡区| 欧美一级午夜免费电影| 欧美精品久久99久久在免费线| 不卡的av中国片| 成人黄色免费短视频| 国产一区二区不卡| 国产成人啪午夜精品网站男同| 日韩二区三区在线观看| 亚洲h在线观看| 精品一区中文字幕| 国产91丝袜在线18| av亚洲精华国产精华精华| 99久久精品99国产精品| 色综合天天做天天爱| 97se狠狠狠综合亚洲狠狠| 不卡的av在线| 欧美在线观看视频在线| 在线综合视频播放| www成人在线观看| 国产精品色呦呦| 午夜精品123| 国产福利不卡视频| 欧美性极品少妇| 日韩久久久久久| 亚洲综合一区二区三区| 日本亚洲最大的色成网站www| 免费成人小视频| 色婷婷av一区二区三区之一色屋| 在线观看成人免费视频| 精品国产乱码久久久久久久 | 福利电影一区二区三区| 欧美酷刑日本凌虐凌虐| 国产精品麻豆久久久| 麻豆久久久久久| 欧美老肥妇做.爰bbww视频| 中文字幕成人av| 国产精品一区二区果冻传媒| 欧美综合天天夜夜久久| 国产精品色在线观看| 激情都市一区二区| 精品人在线二区三区| 偷拍日韩校园综合在线| 欧美中文一区二区三区| 成人欧美一区二区三区在线播放| 国产乱子轮精品视频| 亚洲精品在线网站| 国产剧情在线观看一区二区| 欧美一区二区三区人| 人人精品人人爱| 精品对白一区国产伦| 韩国女主播成人在线| 精品成a人在线观看| 大美女一区二区三区| 玉米视频成人免费看| 欧美在线一二三四区| 日韩精品欧美精品| 精品国产一区二区亚洲人成毛片| 麻豆成人综合网| 国产精品久久久久影院老司|