亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

圖形圖像數(shù)據(jù)信息提取方法

文檔序號(hào):6518269閱讀:298來源:國(guó)知局

專利名稱::圖形圖像數(shù)據(jù)信息提取方法
技術(shù)領(lǐng)域
:本發(fā)明涉及圖形圖像數(shù)據(jù)信息提取的方法,特別涉及一種不少于三個(gè)已知坐標(biāo)數(shù)據(jù)的圖形圖像進(jìn)行數(shù)據(jù)信息提取的方法,在用戶通過鼠標(biāo)選取位置的情況下,程序計(jì)算得到該位置坐標(biāo)。
背景技術(shù)
:科研和生產(chǎn)實(shí)踐工作中,常常需要從圖形圖像中提取大量數(shù)據(jù)信息,這個(gè)工作現(xiàn)在一般是手工完成,而手工操作枯燥、低效、耗時(shí),不精確、出錯(cuò)率高。本發(fā)明設(shè)計(jì)程序、開發(fā)軟件,通過計(jì)算機(jī)完成,極大地提高提取工作的效率和數(shù)據(jù)信息精度。
發(fā)明內(nèi)容本發(fā)明地目的在于提供這樣一種圖形圖像數(shù)據(jù)信息提取的方法將圖形圖像文件導(dǎo)入(BMP文件,如是紙質(zhì)文件,掃描生成BMP文件)程序,顯示在計(jì)算機(jī)屏幕上,用戶通過鼠標(biāo)操作選擇需要采取數(shù)據(jù)信息的位置(取點(diǎn)過程中圖形圖像可隨意縮小、放大和平移),軟件自動(dòng)記錄取樣點(diǎn)數(shù)據(jù)信息(屏幕坐標(biāo)和取樣點(diǎn)的其它信息)。取樣完成后,程序?qū)⑵聊蛔鴺?biāo)轉(zhuǎn)換成實(shí)際坐標(biāo)。本發(fā)明提出的目的通過以下方案來實(shí)現(xiàn)一種圖形圖像數(shù)據(jù)信息提取方法,用于接收作為提取對(duì)象的數(shù)據(jù)信息的圖形圖像文件的輸入,對(duì)數(shù)據(jù)信息進(jìn)行提取并給出數(shù)據(jù)信息的位置的坐標(biāo),所述方法包括a.用鼠標(biāo)操作選擇需要采取數(shù)據(jù)信息的位置,以及b.對(duì)采取數(shù)據(jù)信息的位置進(jìn)行與圖形圖像的匹配顯示、計(jì)算采取數(shù)據(jù)信息的位置的坐標(biāo)。對(duì)用鼠標(biāo)操作選擇需要采取數(shù)據(jù)信息的位置采用了這樣的方法用操作DIB的Win32API函數(shù)在計(jì)算機(jī)屏幕上顯示帶有數(shù)據(jù)信息的圖形圖像位圖文件,用鼠標(biāo)操作選擇需要采取的數(shù)據(jù)信息的位置,程序記錄該位置。對(duì)采取數(shù)據(jù)信息的位置進(jìn)行與圖形圖像的匹配顯示采用了這樣的方法在所述的程序記錄位置時(shí),用到兩個(gè)二維動(dòng)態(tài)鏈表,一個(gè)記錄該位置在位圖文件輸入時(shí),其對(duì)應(yīng)的圖上坐標(biāo),隨后程序繪制該坐標(biāo)位置時(shí),計(jì)算圖上坐標(biāo)轉(zhuǎn)換后的坐標(biāo);另一個(gè)鏈表用于保存。計(jì)算采取數(shù)據(jù)信息的位置的坐標(biāo)采用了這樣的方法所述的在計(jì)算機(jī)屏幕上顯示的帶有數(shù)據(jù)信息的圖形圖像位圖文件的圖像上通過鼠標(biāo)選取三個(gè)已知圖上坐標(biāo)的參考點(diǎn),通過參考點(diǎn)坐標(biāo)對(duì)話框輸入實(shí)際坐標(biāo),則所有采取數(shù)據(jù)信息的坐標(biāo)位置的圖上坐標(biāo)和實(shí)際坐標(biāo)的映射關(guān)系都滿足三個(gè)參考點(diǎn)的映射關(guān)系。用戶通過鼠標(biāo)操作選擇需要采取的數(shù)據(jù)信息的位置或?qū)⒁堰x擇的位置刪除是個(gè)動(dòng)態(tài)隨機(jī)過程,程序?qū)⒁堰x擇的位置的坐標(biāo)記錄于動(dòng)態(tài)二維鏈表中,實(shí)現(xiàn)鼠標(biāo)操作選擇需要采取的數(shù)據(jù)信息的位置或刪除已選擇的位置的隨機(jī)性。將所述三個(gè)參考點(diǎn)的圖上及實(shí)際X、Y坐標(biāo)聯(lián)立,得到包含六個(gè)未知系數(shù)和六個(gè)線性方程的方程組,求解該方程組,得到六個(gè)系數(shù),分別代入各數(shù)據(jù)點(diǎn)的實(shí)際坐標(biāo)與圖上坐標(biāo)的映射關(guān)系式中,就能求得每個(gè)數(shù)據(jù)點(diǎn)對(duì)應(yīng)的實(shí)際坐標(biāo)。方程組如下其中(x01,y01)、(x02,y02)、(x03,y03)分別為三個(gè)參考點(diǎn)的圖上坐標(biāo),(x1,y1)、(x2,y2)、(x3,y3)分別為三個(gè)參考點(diǎn)的實(shí)際坐標(biāo),A、B、C、D、L、M為需求解的未知的系數(shù)。所述的圖形圖像文件為BMP位圖文件。本發(fā)明的有益效果1、本發(fā)明針對(duì)在科研和生產(chǎn)實(shí)踐中,從圖形圖像中提取數(shù)據(jù)(信息)的工作極其頻繁、工作量極大這一實(shí)際情況,采用計(jì)算機(jī)技術(shù)(如C++編程技術(shù)),設(shè)計(jì)開發(fā)軟件,使用戶從過去“手工提取”中解放出來,提高提取工作的效率和數(shù)據(jù)信息精度。2、本發(fā)明解決對(duì)鼠標(biāo)操作已選擇位置在隨后的圖形圖像操作中(放大、縮小、平移),與原圖上該位置的匹配顯示。3、將坐標(biāo)信息精確提取在程序中進(jìn)行實(shí)現(xiàn),可移植性強(qiáng)。對(duì)任何一個(gè)包含數(shù)據(jù)信息的圖像文件都可以將其數(shù)據(jù)提取出來。圖1是本發(fā)明所述方法的流程圖。圖2是位圖讀入及顯示程序示意圖。圖3是二維動(dòng)態(tài)鏈表說明圖。具體實(shí)施例方式下面結(jié)合附圖和并非特定的實(shí)施例來對(duì)本發(fā)明作更詳盡的說明。實(shí)施例1下面將以BMP位圖文件為例來對(duì)本發(fā)明做出更詳細(xì)的說明。Windows操作系統(tǒng)下有兩大類位圖格式——GDI(GraphicsDeviceInterface,圖形設(shè)備接口)位圖和DIB(Device-IndependentBitmaps,設(shè)備無關(guān)位圖)。在MFC(MicrosoftFoundationClass,微軟基本類庫(kù))6.0版中,GDI位圖對(duì)象被封裝在CBitmap類中。由于該類使用一種與WindowsGDI模塊有關(guān)的Windows數(shù)據(jù)結(jié)構(gòu),因此具有設(shè)備相關(guān)性。即使程序得到位圖數(shù)據(jù)的一個(gè)拷貝,其位(bit)安排仍是依賴于顯示硬件的。因此,在同一臺(tái)計(jì)算機(jī)中GDI位圖可以自由地在不同程序中傳輸,但由于其設(shè)備依賴性,使得其通過磁盤或網(wǎng)絡(luò)在不同類型計(jì)算機(jī)之間的傳輸變得毫無意義。DIB則在程序設(shè)計(jì)方面提供許多超越GDI位圖的優(yōu)勢(shì)DIB本身攜帶有自己的顏色信息,使顏色調(diào)配管理變得更加簡(jiǎn)單;任何運(yùn)行Windows操作系統(tǒng)的計(jì)算機(jī)均可處理存儲(chǔ)于BMP文件或可執(zhí)行文件內(nèi)部資源中的DIB;盡管TIFF、GIF或JPEG等格式的圖像文件在轉(zhuǎn)換后也可以被使用,但卻只有采用DIB格式的文件被Win32API所直接支持;雖然在Win32中允許在不同進(jìn)程之間通過傳遞GDI位圖句柄到剪貼板進(jìn)行位圖的傳遞,但在后臺(tái)所進(jìn)行的操作卻是借助DIB來完成的——將設(shè)備相關(guān)的GDI位圖轉(zhuǎn)換成一個(gè)DIB,并將此DIB復(fù)制到一段共內(nèi)存。從中可以明顯看出,相對(duì)設(shè)備獨(dú)立的DIB較之GDI位圖有著明顯的優(yōu)勢(shì),因此,本軟件圖像操作部分的程序?qū)崿F(xiàn)代碼均以DIB作為處理對(duì)象。BMP文件是DIB中比較典型的一種,其文件格式可分為兩大部分文件頭部分和象素點(diǎn)陣部分。文件頭包含DIB的結(jié)構(gòu)數(shù)據(jù),并可進(jìn)一步分為三段。文件頭第一部分是位圖文件頭結(jié)構(gòu)BITMAPFILEHEADER,在wingdi.h中定義如下typedefstructtagBITMAPFILEHEADER{//bmfhWORDbfType;DWORDbfSize;WORDbfReserved1;WORDbfReserved2;DWORDbfOffBits;}BITMAPFILEHEADER;其長(zhǎng)度固定為14字節(jié)。第一個(gè)數(shù)據(jù)成員bfType固定為Ox424D(ASCII碼“BM”),用來標(biāo)識(shí)本文件為BMP位圖文件。數(shù)據(jù)成員bfSize記錄此位圖文件的實(shí)際長(zhǎng)度。bfReserved1和bfReserved2為保留字,通常為0,一般不予考慮。最后的bfOffBits為位圖陣列相對(duì)于文件頭的偏移距離。第二部分是位圖信息頭結(jié)構(gòu)BITMAPHEADER,也是在wingdi.h中定義的,其內(nèi)部成員較多,主要記錄DIB的尺寸和顏色格式等信息,完整定義如下  typedefstructtagBITMAPINFOHEADER{//bmih  DWORDbiSize  LONGbiWidth;  LONGbiHeight;  WORDbiPlanes;  WORDbiBitCount;  DWORDbiCompression;  DWORDbiSizelmage;  LONGbiXPelsPerMeter;  LONGbiYPelsPerMeter;  DWORDbiClrUsed;  DWORDbiClrImportant;  }BITMAPINFOHEADER;其中,成員biSize為該結(jié)構(gòu)長(zhǎng)度,固定為40字節(jié)。biWidth和biHeight分別保存DIB的寬度和高度。biPlanes描述目標(biāo)設(shè)備的位面?zhèn)€數(shù),必須為1。biBitCount記錄圖像的位深度,可選值為1(單色位圖)、4(16色位圖)、8(256位圖)、16(16位增強(qiáng)色位圖)、24(24位真彩色位圖)和32(32位真彩色位圖)。BiCompression指定圖像的壓縮格式,有效值分別為BI_RGB、BI_RLE8、BI_RLE4、BI_BITFIELDS和BI_JPEG等,一般情況下置為BI_RGB不壓縮模式。成員biSizeImage為位圖陣列的大小。biXPelsPerMeter和biYPelsPerMeter指定目標(biāo)設(shè)備的分辨率。biClrUsed指定圖像中實(shí)際用到的顏色數(shù),如果為零,則使用的顏色與位深度指定的相一致。最后的成員biClrImportant如果非零,則指定圖像中相對(duì)重要的顏色數(shù)。最后一段用于存放圖像的調(diào)色板(又稱顏色分配表,colortable),因此對(duì)于不需要調(diào)色板支持的16位、24位和32位位深度圖像的頭文件中將沒有該段,在前兩段之后直接為象素陣列數(shù)據(jù)。而對(duì)于16位以下的圖像,該段為一個(gè)長(zhǎng)度為biClrUsed的RGBQUAD結(jié)構(gòu)數(shù)組。其中RGBQUAD結(jié)構(gòu)定義如下typedefstructtagRGBQUAD{//rgbqBYTErgbBlue;BYTErgbGreen;BYTErgbRed;BYTErgbReserved;}RGBQUAD;結(jié)構(gòu)的前三個(gè)成員分別為顏色的藍(lán)、綠、紅分量,rgbReserved為保留值,通常為0。在此之后便是圖像的象素點(diǎn)陣序列,根據(jù)位深度的不同有著不同的定義。對(duì)于位深度在16位以下的圖像為顏色的索引值;對(duì)于16位、24位和32位的則存放著圖像實(shí)際的R、G、B各分量值。即使是真彩位圖,由于位深度的不同其陣列結(jié)構(gòu)也是有區(qū)別的。16位位深度的圖像采用“565”的組織方式,即以兩個(gè)字節(jié)存放一個(gè)RGB單元RRRRRGGG(高字節(jié))GGGBBBBB(低字節(jié))。24位位深度圖像則恰好可以用三個(gè)字節(jié)存放一個(gè)完整的RGB單元,因此在對(duì)象素進(jìn)行操作時(shí),可以很方便地按字節(jié)進(jìn)行處理而不必進(jìn)行位運(yùn)算。32位位深度的位圖構(gòu)成原理也比較簡(jiǎn)單,它是將一個(gè)顏色字拓展成一個(gè)雙字來實(shí)現(xiàn)的,比如,上述16位位深度的圖像存放有一個(gè)完整RGB顏色的兩個(gè)字節(jié),在轉(zhuǎn)換成32位位深度位圖后就被拓展為00000RRRRRR00000GGGGGG00000BBBBB。本發(fā)明在圖像處理部分中,將注意力集中在圖像處理的算法實(shí)現(xiàn)上,封裝Windows系統(tǒng)提供的一些重要的DIB訪問函數(shù),建立一個(gè)實(shí)現(xiàn)DIB主要操作功能的類。在進(jìn)行圖像處理編程時(shí),只需通過該類提供的公有型(public)接口函數(shù)調(diào)用,即可實(shí)現(xiàn)與之相關(guān)的功能?;竞瘮?shù)有五個(gè)SetDIBitsToDevice()、StretchDIBits()、GetDIBits()、CreateDIBitmap()和CreateDIBSection(),分別用于顯示打印DIB、拉伸顯示DIB、從GDI位圖構(gòu)造DIB、從DIB創(chuàng)建GDI位圖以及創(chuàng)建DIB項(xiàng)(一種特殊的DIB)。SetDIBitsToDevice()函數(shù)負(fù)責(zé)將DIB直接顯示到屏幕或輸出到打印機(jī),而不進(jìn)行任何縮放處理。函數(shù)原型在wingdi.h中聲明如下  intSetDIBitsToDevice(  HDChdc,   //設(shè)備上下文句柄  intXDest,   //目的區(qū)域左上角X坐標(biāo)  intYDest,   //目的區(qū)域左上角Y坐標(biāo)  DWORDdwWidth,   //源BIB寬度  DWORDdwHeight,   //源DIB高度  intXSrc,   //源DIB左上角X坐標(biāo)  intYSrc,   //源DIB左上角Y坐標(biāo)  UINTuStarScan,   //指定DIB掃描的起始行  UINTcScanLines,   //指定掃描行數(shù)<!--SIPO<DPn="5">--><dpn="d5"/>  CONSTVOID*lpvBits,//指向DIB數(shù)據(jù)圖像的指針  CONSTBITMAPINFO*lpbmi,//指向位圖信息結(jié)構(gòu)的指針  UINTfuColorUse//指定使用的是RGB還是調(diào)色//板索引  );拉伸顯示函數(shù)StretchDIBits()對(duì)DIB進(jìn)行拉伸變換后再顯示到顯示器或輸出到打印機(jī)。函數(shù)原型如下  intStretchDIBits(  HDChdc,//設(shè)備上下文句柄  intXDest,//目的區(qū)域左上角X坐標(biāo)  intYDest,//目的區(qū)域左上角Y坐標(biāo)  intnDestWidth,//目的區(qū)域?qū)挾取 ntnDestHeight,//目的區(qū)域高度  intXSrc,//源DIB左上角X坐標(biāo)  intYSrc,//源DIB左上角Y坐標(biāo)  intnSrcWidth,//源DIB寬度  intnSrcHeight,//源DIB高度  CONSTVOID*lpBits,//指向DIB數(shù)據(jù)圖像的指針  CONSTBITMAPINFO*lpBitsInfo,//指向位圖信息結(jié)構(gòu)的指針  UINTiUsage,//指定使用的是RGB還是調(diào)//色板索引  DWRODdwRop//指定繪制方式  );如果參數(shù)nSrcWidth和nDestWidth的符號(hào)或是參數(shù)nSrcHeight和nDestHeight的符號(hào)不同,那么函數(shù)StretchDIBits()將創(chuàng)建一個(gè)原位圖的鏡像。具體而言,如果只有參數(shù)nSrcWidth和nDestWidth的符號(hào)不同,將沿X軸創(chuàng)建鏡像;類似地,如果只有參數(shù)nSrcHeight和nDestHeight的符號(hào)不同,將沿Y軸創(chuàng)建鏡像。到目前為止,Microsoft一直沒有將有關(guān)DIB的API函數(shù)封裝進(jìn)MFC,這樣在進(jìn)行面向?qū)ο?OOP)的程序設(shè)計(jì)時(shí)將十分不便。作者在此部分編程實(shí)現(xiàn)時(shí),主要參閱參考文獻(xiàn)《數(shù)字圖像處理學(xué)VisualC++實(shí)現(xiàn)》(朗銳編著,北京希望電子出版社,2003年1月第1版,ISBN7-89498-026-9)提供的相關(guān)程序代碼。本發(fā)明的軟件源程序中附有詳細(xì)的注釋說明。Microsoft提供的MFC封裝WindowsAPI,是一個(gè)面向?qū)ο蟮姆庋b的C++類庫(kù)。MFC6.0版本封裝大約200個(gè)類,其中一些可以被用戶直接使用,而另一些則主要作為用戶自己的類的基礎(chǔ)類。MFC是一個(gè)應(yīng)用程序的框架結(jié)構(gòu)。它不僅僅是一個(gè)類的集合,還幫助定義應(yīng)用程序的結(jié)構(gòu)并為應(yīng)用程序處理許多雜務(wù)??蚣芙Y(jié)構(gòu)提供了抽象功能,它遠(yuǎn)遠(yuǎn)地超出WindowsAPI的功能。本發(fā)明的程序基于MFC類庫(kù),調(diào)用前述DIB類,即可實(shí)現(xiàn)BMP位圖的顯示;在恰當(dāng)?shù)南⒑瘮?shù)中改變調(diào)用DIB類對(duì)象函數(shù)的參數(shù),實(shí)現(xiàn)位圖的縮放、平移。在此基礎(chǔ)上,編程實(shí)現(xiàn)其它操作,如鼠標(biāo)點(diǎn)擊(獲取數(shù)據(jù)信息)、數(shù)據(jù)信息記錄、轉(zhuǎn)換坐標(biāo)計(jì)算、以及已取點(diǎn)在隨后的圖形圖像操作中(放大、縮小、平移),與原圖上該點(diǎn)的匹配顯示等。對(duì)圖形圖像數(shù)據(jù)信息進(jìn)行提取最終要?dú)w結(jié)到對(duì)BMP位圖的處理上來,程序基本功能如下所述在MFCWizards自動(dòng)生成的單文檔程序中,添加前述DIB類,并在該單文檔程序的文檔類對(duì)象(名為CBMPDoc)中實(shí)例化DIB類,對(duì)象名為m_DIB。在CBMPDoc類對(duì)象的成員函數(shù)OnOpenDocument()中調(diào)用m_DIB對(duì)象的讀入DIB文件成員函數(shù),實(shí)現(xiàn)該單文檔MFC程序中讀入位圖文件。讀入位圖文件后,顯示工作由MFCCView類的派生類對(duì)象CBMPView完成。MFC程序窗口視圖區(qū)的繪制由CBMPView類對(duì)象的成員函數(shù)OnDraw()實(shí)現(xiàn)。在CBMPView類對(duì)象的成員函數(shù)OnDraw()中,首先調(diào)用CBMPView類對(duì)象的成員函數(shù)GetDocument(),得到指向CBMPDoc類對(duì)象的指針,用該指針指向CBMPDoc對(duì)象中的m_DIB對(duì)象,再在OnDraw()函數(shù)中用指向m_DIB的指針調(diào)用DIB類的顯示成員函數(shù),即可實(shí)現(xiàn)位圖的顯示。如說明書附圖2所示。進(jìn)行位圖的縮放、平移操作時(shí),在MFC程序菜單項(xiàng)中添加新的菜單,并在工具欄里繪制相應(yīng)新的工具按鈕,分別對(duì)應(yīng)縮放因子變量和X、Y軸平移象素變量。仍在CBMPView類對(duì)象的OnDraw函數(shù)中,改變傳入m_DIB的顯示函數(shù)的參數(shù),則DIB類調(diào)用封裝的Win32API函數(shù)StretchDIB(),實(shí)現(xiàn)位圖的縮放;或者改變繪制位圖的區(qū)域的坐標(biāo),實(shí)現(xiàn)位圖的平移。程序及注釋如下用鼠標(biāo)托拽實(shí)現(xiàn)位圖的平移操作時(shí),首先定義一個(gè)bool型狀態(tài)變量,當(dāng)用戶點(diǎn)擊平移操作的菜單選項(xiàng)或相應(yīng)工具欄按鈕后,該狀態(tài)量值為true,在CBMPView類對(duì)象的消息函數(shù)OnLButtonDown()(代表鼠標(biāo)左鍵按下)中,記錄當(dāng)前單擊點(diǎn)的坐標(biāo),并用函數(shù)捕捉鼠標(biāo)的運(yùn)動(dòng)(函數(shù)的詳細(xì)情況請(qǐng)見程序清單);按下鼠標(biāo)左鍵并且鼠標(biāo)移動(dòng)(托拽)過程中,CBMPView類對(duì)象的消息函數(shù)OnMouseMove()響應(yīng)該過程,檢測(cè)是否捕捉鼠標(biāo),并由OnLButtonDown()函數(shù)中記錄的單擊點(diǎn)坐標(biāo),計(jì)算變化的平移距離變量x_move及y_move的值,即時(shí)刷新(Invalidate()函數(shù))顯示,便能顯示位圖隨鼠標(biāo)的托拽移動(dòng)位置;最后,松開鼠標(biāo)左鍵,消息函數(shù)OnLButtonUp()函數(shù)響應(yīng)該過程,解除捕捉鼠標(biāo),完成一次鼠標(biāo)托拽平移位圖的操作。由于用戶添加曲線、選擇數(shù)據(jù)點(diǎn)及刪除數(shù)據(jù)點(diǎn)的操作是個(gè)動(dòng)態(tài)隨機(jī)過程,不可能預(yù)先知道用戶將選取、刪除多少個(gè)數(shù)據(jù)點(diǎn)或添加多少條曲線,所以數(shù)據(jù)點(diǎn)的存儲(chǔ)用二維鏈表來實(shí)現(xiàn),鏈表結(jié)構(gòu)如說明書附圖3所示。鏈表由類構(gòu)成,每個(gè)結(jié)點(diǎn)為一個(gè)類對(duì)象。該類中包括一個(gè)用戶自定義類型的數(shù)據(jù)域data,在本軟件中定義為CPoint類型;兩個(gè)該類的指針,一個(gè)指向下一“行”的結(jié)點(diǎn)對(duì)象,另一個(gè)指向下一“列”的結(jié)點(diǎn)對(duì)象。鏈表包括表頭指針*first,其數(shù)據(jù)域data置零,“行”指針指向第一“行”,“列”指針(元素指針)指空(NULL);每一行的頭結(jié)點(diǎn)的數(shù)據(jù)域也置零,“行”指針指向下一“行”的頭結(jié)點(diǎn),元素指針指向該“行”第一個(gè)結(jié)點(diǎn);各“行”中所有結(jié)點(diǎn)的“行”指針都指空,元素指針指向該“行”下一個(gè)結(jié)點(diǎn),數(shù)據(jù)域存儲(chǔ)CPoint類型數(shù)據(jù);如果是“行”內(nèi)最后一個(gè)結(jié)點(diǎn),則其“行”、“列”指針都指空;最后一“行”的頭結(jié)點(diǎn)被指針*cur_row指向,表明該“行”為鏈表最后一行,該行最后一個(gè)結(jié)點(diǎn)被指針*cur_ele指向,表明該結(jié)點(diǎn)為鏈表最后一行最后一個(gè)結(jié)點(diǎn)。該鏈表的類定義及注釋如下基于該二維動(dòng)態(tài)鏈表,在MFC程序的響應(yīng)函數(shù)中調(diào)用鏈表相應(yīng)的成員函數(shù),就能動(dòng)態(tài)實(shí)現(xiàn)曲線、數(shù)據(jù)點(diǎn)的添加以及刪除操作。添加曲線時(shí),相當(dāng)于在二維鏈表中添加新的“行”;添加數(shù)據(jù)點(diǎn)時(shí),即在當(dāng)前“行”中添加新的結(jié)點(diǎn),結(jié)點(diǎn)的數(shù)據(jù)域就是選取的坐標(biāo);刪除時(shí),由于不可能精確地點(diǎn)擊到正好需要?jiǎng)h除的點(diǎn),需要先搜索整個(gè)鏈表,找出數(shù)據(jù)域距選取點(diǎn)最近的結(jié)點(diǎn),再判定該結(jié)點(diǎn)數(shù)據(jù)域的值與選取的點(diǎn)的坐標(biāo)是否在一定的范圍內(nèi),才能最終確定該結(jié)點(diǎn)是否為應(yīng)該刪除的結(jié)點(diǎn),若是,刪除之,完成刪除一個(gè)結(jié)點(diǎn)的操作,不是,取消操作。為實(shí)現(xiàn)已選取的點(diǎn)在位圖顯示變化時(shí)的匹配顯示,當(dāng)對(duì)位圖進(jìn)行縮放或平移操作時(shí),顯示內(nèi)容的位置將發(fā)生改變,此時(shí),需要使用戶選取的數(shù)據(jù)點(diǎn)(即時(shí)顯示)同時(shí)匹配顯示,而不發(fā)生“錯(cuò)位”現(xiàn)象。為解決該問題,作者在存儲(chǔ)數(shù)據(jù)點(diǎn)時(shí),實(shí)際用到兩個(gè)“同步”的二維動(dòng)態(tài)鏈表。首先有一個(gè)開關(guān)變量表明進(jìn)入選擇數(shù)據(jù)點(diǎn)狀態(tài),當(dāng)鼠標(biāo)左鍵按下時(shí),就調(diào)用選擇坐標(biāo)點(diǎn)的函數(shù),該函數(shù)同時(shí)更新兩個(gè)鏈表,一個(gè)名為Current_Points,直接存入當(dāng)前鼠標(biāo)單擊點(diǎn)的坐標(biāo),另一個(gè)名為Real_Points,它的值為其中,out()為二維動(dòng)態(tài)鏈表的成員函數(shù);ccp為當(dāng)前顯示位圖的中心坐標(biāo)(需在OnDraw()函數(shù)中對(duì)其即時(shí)更新);amplifier和m_Rect如前所述。可見,Real_Points實(shí)際記錄的是選取的數(shù)據(jù)點(diǎn)在載入位圖時(shí),其對(duì)應(yīng)的當(dāng)時(shí)的圖上坐標(biāo)。隨后,在OnDraw()函數(shù)中繪制這些己選取的坐標(biāo)點(diǎn)時(shí),只需計(jì)算Real_Points轉(zhuǎn)換坐標(biāo)后的Current_Points的坐標(biāo),就能實(shí)現(xiàn)所需的匹配顯示。另外,窗口的大小是可變的,載入位圖時(shí),總是讓位圖中心處于窗口中心。所以,窗口大小發(fā)生變化時(shí),Real_Points的值隨之發(fā)生改變。MFC中有處理窗口改變的消息函數(shù)OnSize(),其函數(shù)參數(shù)就是改變的值。則Real_Points的計(jì)算方法為將上述表達(dá)式中m_Rect的兩個(gè)相應(yīng)的值改為OnSize()函數(shù)的兩個(gè)坐標(biāo)參數(shù)。實(shí)現(xiàn)參考點(diǎn)選取、刪除及匹配顯示的方法與上述方法一致,甚至更為簡(jiǎn)單,因?yàn)閰⒖键c(diǎn)需且僅需三個(gè),所以只需要定義一個(gè)一維包含三個(gè)元素的數(shù)組即可,無需使用二維鏈表來實(shí)現(xiàn)。參考點(diǎn)的實(shí)際坐標(biāo)的輸入通過一個(gè)MFC對(duì)話框?qū)崿F(xiàn)。在MFC中制作一個(gè)對(duì)話框?qū)嵗?,其中包含EditBox控件,每個(gè)控件分別對(duì)應(yīng)一個(gè)參考點(diǎn)的X或Y坐標(biāo)值,記錄三個(gè)參考點(diǎn)的實(shí)際坐標(biāo)。由于已知三個(gè)參考點(diǎn)的圖上坐標(biāo)(由用戶通過鼠標(biāo)點(diǎn)取)和實(shí)際坐標(biāo)(由用戶通過參考點(diǎn)坐標(biāo)對(duì)話框輸入),則所有數(shù)據(jù)點(diǎn)的圖上坐標(biāo)和實(shí)際坐標(biāo)的映射關(guān)系都滿足三個(gè)參考點(diǎn)的映射關(guān)系。將三個(gè)參考點(diǎn)的圖上及實(shí)際X、Y坐標(biāo)聯(lián)立,得到包含六個(gè)未知系數(shù)和六個(gè)線性方程的方程組,求解該方程組,得到六個(gè)系數(shù),分別代入各數(shù)據(jù)點(diǎn)的實(shí)際坐標(biāo)與圖上坐標(biāo)的映射關(guān)系式中,就能求得每個(gè)數(shù)據(jù)點(diǎn)對(duì)應(yīng)的實(shí)際坐標(biāo)。方程組如下其中(x01,y01)、(x02,y02)、(x03,y03)分別為三個(gè)參考點(diǎn)的圖上坐標(biāo),(x1,y1)、(x2,y2)、(x3,y3)分別為三個(gè)參考點(diǎn)的實(shí)際坐標(biāo),A、B、C、D、L、M為需求解的未知的系數(shù)。在選擇參考點(diǎn)時(shí),最佳情況是所有需要求解的數(shù)據(jù)點(diǎn),都處于三個(gè)參考點(diǎn)形成的三角形區(qū)域的中心,且三角形形狀盡量規(guī)則,此時(shí)求解的數(shù)據(jù)精度高;若選取的三個(gè)參考點(diǎn)共線或近似共線,則三角形面積為0或近似為0,在求解線性方程組時(shí),系數(shù)行列式的值就會(huì)很小,程序可以根據(jù)該行列式的值判定用戶選取的參考點(diǎn)的情況,以提醒用戶是否重新選取參考點(diǎn),確保計(jì)算數(shù)據(jù)的精度。本發(fā)明所述的對(duì)圖形圖像數(shù)據(jù)信息進(jìn)行提取的方法,不僅僅限于說明書和實(shí)施方式中所列運(yùn)用,它完全可以被適用于各種適合本發(fā)明之領(lǐng)域,對(duì)于熟悉本領(lǐng)域的人員而言可容易地實(shí)現(xiàn)另外的優(yōu)點(diǎn)和進(jìn)行修改,因此在不背離權(quán)利要求及等同范圍所限定的一般概念的精神和范圍的情況下,本發(fā)明并不限于特定的細(xì)節(jié)、代表性的設(shè)備和這里示出與描述的圖示示例。權(quán)利要求1、一種圖形圖像數(shù)據(jù)信息提取方法,用于接收作為提取對(duì)象的數(shù)據(jù)信息的圖形圖像文件的輸入,對(duì)數(shù)據(jù)信息進(jìn)行提取并給出數(shù)據(jù)信息的位置的坐標(biāo),所述方法包括a.用鼠標(biāo)操作選擇需要采取數(shù)據(jù)信息的位置,以及b.對(duì)采取數(shù)據(jù)信息的位置進(jìn)行與圖形圖像的匹配顯示、計(jì)算采取數(shù)據(jù)信息的位置的坐標(biāo)。2、根據(jù)權(quán)利要求1所述的圖形圖像數(shù)據(jù)信息提取方法,其特征在于,對(duì)用鼠標(biāo)操作選擇需要采取數(shù)據(jù)信息的位置采用了這樣的方法用操作DIB的Win32API函數(shù)在計(jì)算機(jī)屏幕上顯示帶有數(shù)據(jù)信息的圖形圖像位圖文件,用鼠標(biāo)操作選擇需要采取的數(shù)據(jù)信息的位置,程序記錄該位置。3、根據(jù)權(quán)利要求1所述的圖形圖像數(shù)據(jù)信息提取方法,其特征在于,對(duì)采取數(shù)據(jù)信息的位置進(jìn)行與圖形圖像的匹配顯示采用了這樣的方法在所述的程序記錄位置時(shí),用到兩個(gè)二維動(dòng)態(tài)鏈表,一個(gè)記錄該位置在位圖文件輸入時(shí),其對(duì)應(yīng)的圖上坐標(biāo),隨后程序繪制該坐標(biāo)位置時(shí),計(jì)算圖上坐標(biāo)轉(zhuǎn)換后的坐標(biāo);另一個(gè)鏈表用于保存。4、根據(jù)權(quán)利要求1所述的圖形圖像數(shù)據(jù)信息提取方法,其特征在于,計(jì)算采取數(shù)據(jù)信息的位置的坐標(biāo)采用了這樣的方法所述的在計(jì)算機(jī)屏幕上顯示的帶有數(shù)據(jù)信息的圖形圖像位圖文件的圖像上通過鼠標(biāo)選取三個(gè)已知圖上坐標(biāo)的參考點(diǎn),通過參考點(diǎn)坐標(biāo)對(duì)話框輸入實(shí)際坐標(biāo),則所有采取數(shù)據(jù)信息的坐標(biāo)位置的圖上坐標(biāo)和實(shí)際坐標(biāo)的映射關(guān)系都滿足三個(gè)參考點(diǎn)的映射關(guān)系。5、根據(jù)權(quán)利要求2所述的圖形圖像數(shù)據(jù)信息提取方法,其特征在于,用戶通過鼠標(biāo)操作選擇需要采取的數(shù)據(jù)信息的位置或?qū)⒁堰x擇的位置刪除是個(gè)動(dòng)態(tài)隨機(jī)過程,程序?qū)⒁堰x擇的位置的坐標(biāo)記錄于動(dòng)態(tài)二維鏈表中,實(shí)現(xiàn)鼠標(biāo)操作選擇需要采取的數(shù)據(jù)信息的位置或刪除已選擇的位置的隨機(jī)性。6、根據(jù)權(quán)利要求4所述的圖形圖像數(shù)據(jù)信息提取方法,其特征在于,將所述的三個(gè)參考點(diǎn)的圖上及實(shí)際X、Y坐標(biāo)聯(lián)立,得到包含六個(gè)未知系數(shù)和六個(gè)線性方程的方程組,求解該方程組,得到六個(gè)系數(shù),分別代入各數(shù)據(jù)點(diǎn)的實(shí)際坐標(biāo)與圖上坐標(biāo)的映射關(guān)系式中,就能求得每個(gè)數(shù)據(jù)點(diǎn)對(duì)應(yīng)的實(shí)際坐標(biāo)。方程組如下其中(x01,y01)、(x02,y02)、(x03,y03)分別為三個(gè)參考點(diǎn)的圖上坐標(biāo),(x1,y1)、(x2,y2)、(x3,y3)分別為三個(gè)參考點(diǎn)的實(shí)際坐標(biāo),A、B、C、D、L、M為需求解的未知的系數(shù)。7、根據(jù)從1到6中任一權(quán)利要求所述的圖形圖像數(shù)據(jù)信息提取方法,其特征在于,所述的圖形圖像文件為BMP位圖文件。全文摘要一種圖形圖像數(shù)據(jù)信息提取方法,將圖形圖像文件導(dǎo)入(BMP文件,如是紙質(zhì)文件,掃描生成BMP文件)本程序,顯示在計(jì)算機(jī)屏幕上,用戶通過鼠標(biāo)操作選擇需要采取數(shù)據(jù)信息的位置(取點(diǎn)過程中可隨意對(duì)圖形圖像進(jìn)行縮小、放大和平移),程序自動(dòng)記錄取樣點(diǎn)數(shù)據(jù)信息(屏幕坐標(biāo)和取樣點(diǎn)的其它信息)。取樣完成后,程序?qū)⑵聊蛔鴺?biāo)轉(zhuǎn)換成實(shí)際坐標(biāo)。本發(fā)明的優(yōu)點(diǎn)在于這個(gè)工作現(xiàn)在一般是手工完成,而手工操作枯燥、低效、耗時(shí),不精確、出錯(cuò)率高;本發(fā)明通過計(jì)算機(jī)完成,極大地提高提取工作的效率和數(shù)據(jù)信息精度。實(shí)現(xiàn)坐標(biāo)信息精確提取,保證已取點(diǎn)在隨后的圖形圖像操作中(放大、縮小、平移),與原圖上該點(diǎn)的匹配顯示,具備用戶友好的操作界面。文檔編號(hào)G06T1/00GK1687966SQ20051001342公開日2005年10月26日申請(qǐng)日期2005年5月9日優(yōu)先權(quán)日2005年5月9日發(fā)明者黃歲樑,鈕杰申請(qǐng)人:南開大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1