自動閾值迭代法及Otsu法實驗報告_第1頁
自動閾值迭代法及Otsu法實驗報告_第2頁
自動閾值迭代法及Otsu法實驗報告_第3頁
自動閾值迭代法及Otsu法實驗報告_第4頁
自動閾值迭代法及Otsu法實驗報告_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上數(shù)字圖像處理實驗自動閾值迭代法及Otsu法姓名:學好:指導老師:王韜時間:2012年5月自動閾值迭代法及Otsu法實驗報告1、 實驗原理 大津法由大津于1979年提出,對圖像Image,記t為前景與背景的分割閾值,前景點數(shù)占圖像比例為w0,平均灰度為u0;背景點數(shù)占圖像比例為w1,平均灰度為u1。圖像的總平均灰度為:u=w0*u0+w1*u1。從最小灰度值到最大灰度值遍歷t,當t使得值g=w0*(u0-u)2+w1*(u1-u)2 最大時t即為分割的最佳閾值。對大津法可作如下理解:該式實際上就是類間方差值,閾值t分割出的前景和背景兩部分構成了整幅圖像,而前景取值u0,

2、概率為 w0,背景取值u1,概率為w1,總均值為u,根據(jù)方差的定義即得該式。因方差是灰度分布均勻性的一種度量,方差值越大,說明構成圖像的兩部分差別越大, 當部分目標錯分為背景或部分背景錯分為目標都會導致兩部分差別變小,因此使類間方差最大的分割意味著錯分概率最小。 2、 實驗步驟自動閾值(迭代法)步驟 (1)估計一個閾值T(比如均值) (2)用閾值T將灰度直方圖分割成兩個區(qū)域R1、R2 (3)分別計算兩個區(qū)域R1、R2內(nèi)的灰度平均值u1和u2 (4)選擇新閾值T=(u1+u2)/2(5)重復上述工作35次,直到前后兩次的閾值不變自動閾值(Otsu法)步驟 (1).計算直方圖 (2).設置初值:w

3、i(0)以及ui(0) (3).從1到最大值設置閾值T。更新wi (t)以及ui (t)。計算b(t) * b(t)。 (4).選取最大b(t) * b(t)對應的T3、 實驗程序#include <afx.h>#include <windows.h>#include <iostream.h>#include <stdlib.h>#include <math.h>int nWidth; /圖像寬度int nHeight; /圖像高度int nColorBits; /每個像素所占位數(shù)int nColor; /圖像顏色數(shù)int nLen;

4、 /圖像文件大小,以字節(jié)數(shù)計int nByteWidth; /圖像每行字節(jié)數(shù)BYTE *lpBitmap; /指向圖像首字節(jié)的指針BYTE *lpBits; /指向圖像實際數(shù)據(jù)的指針void OpenFile(CString FileName);void SaveFile(CString FileName);void OtusTHreshold(void);/*函數(shù)名稱OpenFile() 功能:讀取一幅BMP圖像*/void OpenFile(CString FileName)/創(chuàng)建文件語句HANDLE hFile=:CreateFile(FileName,GENERIC_READ,FILE

5、_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(hFile=0)printf("不能打開文件,請重新選擇!n");return; /讀取圖像文件 DWORD WriteNum; BITMAPFILEHEADER BFH;/文件頭 ReadFile(hFile,&BFH,14,&WriteNum,NULL);/讀取文件頭,共14個字節(jié) if(BFH.bfType!='MB')|(WriteNum!=sizeof(BITMAPFILEHEADER) printf(&quo

6、t;不是BMP位圖文件或數(shù)據(jù)有誤!n"); return; nLen=GetFileSize(hFile,NULL)-sizeof(BITMAPFILEHEADER);/獲取文件的長度 lpBitmap=new BYTEnLen;/存放圖像,包括圖像的信息頭、調(diào)色板和像素數(shù)據(jù) ReadFile(hFile,lpBitmap,nLen,&WriteNum,NULL);/讀取圖像數(shù)據(jù) /設置全局變量的值 BITMAPINFOHEADER *BIH=(BITMAPINFOHEADER *)lpBitmap);/圖像文件的信息頭 nWidth=BIH->biWidth;/圖像的

7、寬度 nHeight=BIH->biHeight;/圖像的高度 nColorBits=BIH->biBitCount;/圖像的顏色數(shù) nByteWidth=(nWidth*nColorBits+31)/32*4;/圖像的掃描寬度 nColor=(nColorBits>8)?0:(1<<nColorBits);/調(diào)色板中的顏色數(shù) lpBits=lpBitmap+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*nColor;/指向圖像數(shù)據(jù)的實際位置CloseHandle(hFile);/關閉文件句柄/*函數(shù)名稱SaveFile() 功

8、能:保存一幅BMP圖像*/void SaveFile(CString FileName)/創(chuàng)建一個文件來保存圖像文件 HANDLE hFile=:CreateFile(FileName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);if(hFile=0)printf("不能創(chuàng)建文件,請重新選擇!n");return;/創(chuàng)建一個文件頭,并保存到創(chuàng)建的文件中unsigned long WriteNum; BITMAPFILEHEADER BFH;BFH.bfType=&

9、#39;MB'BFH.bfSize=nLen+sizeof(BITMAPFILEHEADER); BFH.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+nColor*sizeof(RGBQUAD);BFH.bfReserved1=BFH.bfReserved2=0;WriteFile(hFile,&BFH,sizeof(BITMAPFILEHEADER),&WriteNum,NULL);/保存改變的位圖文件數(shù)據(jù)WriteFile(hFile,(BITMAPINFOHEADER*)lpBitmap,

10、nLen,&WriteNum,NULL);CloseHandle(hFile);/關閉文件句柄/*圖像分割Otsu法*/void Otus(void)int i,j;/循環(huán)變量int nGrayHistogram256;/灰度直方圖數(shù)組,并初始化memset(nGrayHistogram,0,sizeof(nGrayHistogram);/統(tǒng)計各個灰度級對應的像素個數(shù),并存放到灰度直方圖數(shù)組中int nPixel;for(j=0;j<nHeight;j+)for(i=0;i<nWidth;i+)nPixel=lpBitsnByteWidth*j+i;/獲取當前像素點的灰度值

11、nGrayHistogramnPixel+;/對灰度值統(tǒng)計計數(shù)float u0,u1;/c0組和c1組的均值float w0,w1;/c0組和c1組的概率int nCount0;/c0組的像素總數(shù)int nT,nBestT;/閾值和最佳閾值(對應方差最大時的閾值)float fVaria,fMaxVaria=0;/方差和最大方差/統(tǒng)計直方圖中像素點的總數(shù),并存放到nSum中int nSum=0;for(i=0;i<256;i+) nSum+=nGrayHistogrami;/令閾值nT從0遍歷到255for(nT=0;nT<256;nT+)/當閾值為nT時,計算c0組的均值和概率u

12、0=0;nCount0=0;for(i=0;i<=nT;i+)u0+=i*nGrayHistogrami;nCount0+=nGrayHistogrami;u0/=nCount0;w0=(float)nCount0/nSum;/當閾值為nT時,計算c1組的均值和概率u1=0;for(i=nT+1;i<256;i+)u1+=i*nGrayHistogrami;u1/=(nSum-nCount0);w1=1-w0;fVaria=w0*w1*(u0-u1)*(u0-u1);/計算兩組間的方差 if(fVaria>fMaxVaria)/記錄最大方差和最佳閾值fMaxVaria=fVaria;nBestT=nT;/利用最佳閾值對源圖像作分割處理for(j=0;j<nHeight;j+)for(i=0;i<nWidth;i+)if(lpBitsj*nByteWidth+i<nBestT)lpBitsj*nByteWidth+i=0;elselpBitsj*nByteWidth+i=255;void main()char OpenFileName200;char SaveFileName200;cout<<"請輸入圖像路徑"<< endl;gets(OpenFileName)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論