freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

弦箭算法的c語(yǔ)言實(shí)現(xiàn)本科畢業(yè)論文(編輯修改稿)

2025-07-25 18:17 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 個(gè)字節(jié),其定義如下:typedef struct tagRGBQUAD{BYTE rgbBlue;//該顏色的藍(lán)色分量BYTE rgbGreen//該顏色的綠色分量BYTE rgbRed;//該顏色的紅色分量BYTE rgbReserved;//保留值}RGBQUAD;第四部分就是實(shí)際的圖像數(shù)據(jù)。對(duì)于用到調(diào)色板的位圖,圖像數(shù)據(jù)就是該像素顏色在調(diào)色板中的索引值,對(duì)于真彩色圖像,圖像數(shù)據(jù)就是實(shí)際的R、G、B值。下面就2色、16色、256色和真彩色位圖分別介紹。對(duì)于2色位圖,用1位就可以表示該像素的顏色(一般0表示黑,1表示白),所以一個(gè)字節(jié)可以表示8個(gè)像素。對(duì)于16色位圖,用4位就可以表示該像素的顏色,所以一個(gè)字節(jié)可以表示2個(gè)像素。對(duì)于256色位圖,用8位就可以表示該像素的顏色,所以一個(gè)字節(jié)剛好可以表示1個(gè)像素。下面有兩點(diǎn)需要注意:(1)每一行的字節(jié)數(shù)必須是4的整數(shù)倍,如果不是,則需補(bǔ)齊。(2)BMP文件的數(shù)據(jù)存放是從下到上,從左到右的。也就是說(shuō),從文件中最先讀到的是圖像最下面一行的左邊第一個(gè)像素,然后是第二個(gè)像素,接下來(lái)是倒數(shù)第二行左邊第一個(gè)像素,左邊第二個(gè)像素。以此類推,最后得到的是最上面一行的最右邊的一個(gè)像素。2 本文編程環(huán)境本文編程所使用的環(huán)境是Microsoft Visual C++ 。Visual C++提供了一個(gè)支持可視化編程的集成開(kāi)發(fā)環(huán)境,采用標(biāo)準(zhǔn)的多窗口Windows用戶界面,易于使用,可以很方便的生成人機(jī)界面。通過(guò)C++編程,弦箭算法可以方便地嵌入實(shí)際應(yīng)用,其代碼也可應(yīng)用于諸多領(lǐng)域。由于MFC沒(méi)有封裝處理與DIB位圖相關(guān)的Windows API函數(shù)的類,使得利用C語(yǔ)言實(shí)現(xiàn)對(duì)圖像的處理相對(duì)復(fù)雜。本文利用一個(gè)現(xiàn)有的圖像處理程序ImageProcessing,在此基礎(chǔ)上,嵌入弦箭算法。利用該程序,可以很方便地讀取圖像的各種信息,以及對(duì)圖像數(shù)據(jù)進(jìn)行計(jì)算。3 弦箭累加的編程實(shí)現(xiàn)一、類Cdib 及canny算子程序ImageProcessing是在VC++環(huán)境下編寫的對(duì)BMP圖像進(jìn)行處理的MFC AppWizard程序,可以對(duì)BMP圖像進(jìn)行變換、特征提取、圖像分割等多種處理。程序通過(guò)類Cdib來(lái)實(shí)現(xiàn)對(duì)BMP圖像文件的讀取、顯示、保存以及獲取圖像文件信息等, 在程序ImageProcessing中,類Cdib共設(shè)計(jì)了13個(gè)屬性(成員變量)和30個(gè)成員函數(shù),通過(guò)它們來(lái)完成對(duì)圖像的一些處理。這里對(duì)類Cdib中的13種屬性進(jìn)行簡(jiǎn)要說(shuō)明如下:LPVOID m_lpvColorTable:調(diào)色板指針;HBITMAP m_hBitmap:BITMAP結(jié)構(gòu)指針;LPBYTE m_lpImage:DIB位圖數(shù)據(jù)塊地址;LPBITMAPINFOHEADER m_lpBMIH:DIB信息頭指針;HGLOBAL m_hGlobal:全局的句柄,用于內(nèi)存映射文件中; Alloc m_nBmihAlloc:表示信息頭內(nèi)存分配的狀況;Alloc m_nImageAlloc:表示位圖數(shù)據(jù)分配的狀況;DWORD m_dwSizeImage:DIB位圖中的字節(jié)數(shù)(信息頭和調(diào)色板數(shù)據(jù)除外);int m_nColorTableEntries:調(diào)色板表項(xiàng)數(shù);HANDLE m_hFile:文件句柄;HANDLE m_hMap:內(nèi)存映射文件句柄;LPVOID m_lpvFile:文件句柄;HPALETTE m_hPalette:調(diào)色板句柄;對(duì)于Cdib類的構(gòu)造函數(shù)、文件讀寫成員函數(shù)以及大多數(shù)Get成員函數(shù)等意義都是暗含的,程序中也都有詳細(xì)的注解,在此不再詳細(xì)討論。canny算子是對(duì)圖像進(jìn)行邊緣檢測(cè)的一種算法,其主要通過(guò)以下幾個(gè)函數(shù)來(lái)實(shí)現(xiàn):函數(shù)GaussianSmooth對(duì)原圖象進(jìn)行高斯濾波;函數(shù)DirGrad來(lái)計(jì)算x、y方向上的導(dǎo)數(shù);函數(shù)GradMagnitude計(jì)算梯度的幅度;通過(guò)函數(shù)NonmaxSuppress應(yīng)用nonmaximum 抑制;應(yīng)用Hysteresis,找到找到所有的邊界。canny函數(shù)輸入?yún)?shù)說(shuō)明如下:unsigned char *pUnchImage 圖象數(shù)據(jù)int nWidth 圖象數(shù)據(jù)寬度int nHeight 圖象數(shù)據(jù)高度double sigma 高斯濾波的標(biāo)準(zhǔn)方差double dRatioLow 低閾值和高閾值之間的比例double dRatioHigh 高閾值占圖象象素總數(shù)的比例unsigned char *pUnchEdge canny算子計(jì)算后的分割圖canny分割算子,計(jì)算的結(jié)果保存在pUnchEdge中,邏輯1(255)表示該點(diǎn)為邊界點(diǎn),邏輯0(0)表示該點(diǎn)為非邊界點(diǎn)。該函數(shù)的參數(shù)sigma,dRatioLow,dRatioHigh,是需要指定的。這些參數(shù)會(huì)影響分割后邊界點(diǎn)數(shù)目的多少,, , 。經(jīng)過(guò)canny算子計(jì)算后的結(jié)果如下圖31所示。(a)原圖 (b)canny算子計(jì)算后的圖像圖31二、割斷圖像中分叉的邊緣點(diǎn)經(jīng)過(guò)canny算子的圖像曲線,會(huì)有很多分叉的曲線,我們通過(guò)將曲線交叉點(diǎn)置為0來(lái)將其斷開(kāi)。首先按從上到下的、從左到右的順序掃描圖像,尋找數(shù)值不為0的點(diǎn),定義整形變量count來(lái)記錄該點(diǎn)四鄰域中不為0的點(diǎn)的個(gè)數(shù),count初始化為0。若count值大于2,則表示曲線在該點(diǎn)處分叉, count值小于1(即為0),表示該點(diǎn)為孤立點(diǎn),count值為1表示該點(diǎn)為其所在曲線的一個(gè)端點(diǎn),count值為2表示該點(diǎn)為曲線的一個(gè)中間點(diǎn)。我們只要要將count值大于2的點(diǎn)置為0,就可以將分叉的曲線斷開(kāi),但是這樣做會(huì)將分叉的曲線斷成三條曲線,如圖32(b)所示。通過(guò)分析發(fā)現(xiàn),如果將該點(diǎn)四鄰域中不為0的一個(gè)點(diǎn)置為0,最多只會(huì)將曲線斷成兩條曲線,如圖32(c)所示。這樣不僅減少了曲線條數(shù),也是曲線盡可能不被斷成短線,提高算法準(zhǔn)確率。該段程序流程如圖33所示。abcd0bcdab0d(a) a點(diǎn)四鄰域有b、c、d三個(gè)點(diǎn),曲線在a點(diǎn)處分叉(b) 若將a點(diǎn)置為0后,b、c、d點(diǎn)分別位于三條曲線(c) 若將a點(diǎn)鄰域中c點(diǎn)置為0后,曲線最多被分割成為兩條: c點(diǎn)引出的曲線和a、b、d點(diǎn)所在曲線圖32三、刪除圖像中長(zhǎng)度大于某一閾值的直線過(guò)濾掉邊緣曲線中的長(zhǎng)度大于某一閾值的直線,對(duì)直線的判斷采用爬行算法,刪除圖像中長(zhǎng)度大于某一閾值的直線,主要通過(guò)Del_line 和Del_l兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)。函數(shù)Del_l()實(shí)現(xiàn)的功能是刪除從點(diǎn)(x,y)開(kāi)始的dir_long個(gè)值為255的點(diǎn),其輸入?yún)?shù)說(shuō)明如下: unsigned char *pUnchEdge 經(jīng)過(guò)邊緣檢測(cè)后的圖象數(shù)據(jù); int nWidth 圖象數(shù)據(jù)寬度; int x,int y 圖象數(shù)據(jù)中的點(diǎn)(x,y);int dir_long 要?jiǎng)h除的點(diǎn)的個(gè)數(shù); 在函數(shù)中定義了變量xy1來(lái)對(duì)各點(diǎn)進(jìn)行判斷,其初始化為x、y,通過(guò)變量i控制循環(huán)。算法流程圖如圖34所示。圖33 割斷分叉點(diǎn) 圖33Del_l函數(shù)流程圖 函數(shù)Del_line()實(shí)現(xiàn)的功能是刪除圖像中長(zhǎng)度小于某一閾值p的直線,其輸入?yún)?shù)說(shuō)明如下: unsigned char *pUnchEdge 經(jīng)過(guò)邊緣檢測(cè)后的圖象數(shù)據(jù) int nWidth 圖象數(shù)據(jù)寬度int nHeight 圖像數(shù)據(jù)高度 int x,int y 圖象邊緣曲線中的一個(gè)點(diǎn)在函數(shù)中定義變量xy1來(lái)依次對(duì)各點(diǎn)進(jìn)行判斷,其值初始化圖34 Del_line函數(shù)流程圖為x、y;變量p為長(zhǎng)度閾值;變量dir為方向向量,記錄曲線中點(diǎn)的走向,初始化為0;變量dir_long為直線長(zhǎng)度,初始化為0;通過(guò)new函數(shù)開(kāi)辟一段大小為nWidth*nHeight的數(shù)據(jù)單元unsigned char * pUnchEdge1,其數(shù)據(jù)初始化為圖像數(shù)據(jù),通過(guò)其來(lái)控制我完成對(duì)曲線的搜索計(jì)算。該函數(shù)算法流程圖如圖34所示,函數(shù)在完成對(duì)變量的初始化后,從點(diǎn)(x,y)判斷曲線的下一個(gè)點(diǎn)在其四鄰域中的位置方向,dir記錄了上一次判斷的方向。如果dir與本次判斷一致,則變量dir_long加一。如果不一致,且dir_long的值是小于閾值p,只需更改dir的值,繼續(xù)判斷下一個(gè)點(diǎn);如果dir_long的值大于閾值p,則先改變曲線下一個(gè)點(diǎn)的值(將其賦值254),調(diào)用del_l函數(shù)刪除從(x1,y1)開(kāi)始的曲線上的dir_long個(gè)值為255的點(diǎn)。再遞歸調(diào)用dir_long函數(shù)從這下一個(gè)點(diǎn)開(kāi)始判斷,直至該條曲線所有點(diǎn)判斷完畢后,算法結(jié)束。四、搜索并標(biāo)記曲線算法該算法主要是依次搜索圖像中各條曲線,在數(shù)組pUnchImage記錄圖像中各點(diǎn)所在曲線的序號(hào),并刪除圖像中過(guò)短的曲線。算法通過(guò)函數(shù)Del_cur和函數(shù)Serch_cur來(lái)實(shí)現(xiàn),算法流程圖如下圖35所示。函數(shù)Del_cur用于刪除圖像中以點(diǎn)(x,y)為起始點(diǎn)的曲線
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1