




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
-.z.數(shù)字圖像處理課程設(shè)計報告細(xì)胞識別目錄第一部分實驗課題名稱----------------------------------------------------------------------------------3實驗?zāi)康?---------------------------------------------------------------------------------------3實驗內(nèi)容概要----------------------------------------------------------------------------------3第二部分建立工程文件----------------------------------------------------------------------------------3圖像信息獲取----------------------------------------------------------------------------------4如何建立下拉菜單----------------------------------------------------------------------------6標(biāo)記Mark點------------------------------------------------------------------------------------6二值化---------------------------------------------------------------------------------------------9填洞------------------------------------------------------------------------------------------------9收縮------------------------------------------------------------------------------------------------10獲取中心點--------------------------------------------------------------------------------------11細(xì)胞計數(shù)-----------------------------------------------------------------------------------------13All-steps-----------------------------------------------------------------------------------------13擴(kuò)展功能---------------------------------------------------------------------------------------14第三部分12、各步驟結(jié)果和錯誤舉例--------------------------------------------------------------------16第四部分13、心得體會----------------------------------------------------------------------------------------22第一部分1、實驗課題:細(xì)胞識別2、實驗?zāi)康模簩ρ杭?xì)胞切片圖片進(jìn)行各種處理,最終得出細(xì)胞的數(shù)目、面積等信息。3、實驗內(nèi)容概要:基于VC++6.0軟件下的細(xì)胞識別,通過細(xì)胞的標(biāo)記、二值化、填洞、收縮、獲取中心點、計數(shù)等過程完成實驗?zāi)康?。第二部分——實驗具體步驟1、建立工程文件新建MFC工程項目:--MFCAppWizard、工程名拷貝cdib.h,cdib.cpp到工程文件夾,再向工程里添加doc.h添加變量:m_lpDib和頭文件*include”cdib.h”doc.cpp:變量(m_lpDib)的new、deletedoc.cpp:Serialize()2、圖像信息獲取讀取圖像參數(shù)View.cpp:OnDraw()m_pDib->Draw()如果圖像不為空的話,則就執(zhí)行如下主要代碼:點擊鍵,建立類向?qū)?,在messages中添加OnInitialUpdate()函數(shù),添加代碼實現(xiàn)對自動打開固定圖片。通過鼠標(biāo)右擊,點擊建立類向?qū)?,在messages中添加OnMouseMove()函數(shù),添加代碼實現(xiàn)獲取所要信息,即實現(xiàn)鼠標(biāo)在圖像任一位置移動時可以直觀的讀取相對應(yīng)位置的信息??梢栽谄聊簧巷@示鼠標(biāo)所指點的坐標(biāo)以及RGB、HSI和灰度值,通過HSI的可以選取合適的閾值來找到細(xì)胞以及邊界。為了RGB圖像轉(zhuǎn)化為人眼更容易識別的HSI模型,我們可以通過添加成員函數(shù)RgbtoHsi來實現(xiàn)這一功能。HSI模型與RGB模型的轉(zhuǎn)化關(guān)系(添加函數(shù)時,可以右擊類窗口中的view.h,選中addmemberfunction,之后選擇函數(shù)的返回值類型和函數(shù)描述,其它默認(rèn)不變)確定后在里面添加實現(xiàn)函數(shù)功能的代碼。添加下拉菜單在resourceview那欄的找到菜單按鍵設(shè)置雙擊,后在里面添加所需按鍵每個按鍵的ID號為注意在填寫為IDR_加菜單大寫。之后右擊按鍵,建立類向?qū)砑影存I所需函數(shù)4、標(biāo)記mark分為四步找出mark(red)點和maybemark(blue)點將maybemark(blue)點變成mark(blackred)點將mark(blackred)點變成edge(yellow(fullred&&fullgreen))點edge點濾波基本思想:Mark點指的是我們要尋找的細(xì)胞內(nèi)的點。我們先獲取每一個像素點的RGB分量,然后我們將其轉(zhuǎn)化成HSI分量,將H分量進(jìn)行歸一化,因為S的*圍是0到1,所以我們要進(jìn)行尺度的一致,這樣才具有可計算性。然后我們通過每個像素點的H分量和S分量的值與細(xì)胞內(nèi)部的H分量和S分量計算歐幾里得距離,設(shè)定一個Mark門限值(我們這里將MarkDoor設(shè)置為0.09,大家可以行設(shè)置合適的參數(shù)),小于這個門限值我們就當(dāng)做是細(xì)胞的內(nèi)部,然后對細(xì)胞進(jìn)行標(biāo)記(Red)。還需要設(shè)定一個MaybeMark門限值(我們這里將MaybeMarkDoor設(shè)置為0.15,大家可以行設(shè)置合適的參數(shù)),我們大于Mark門限值小于MaybeMark門限值時,我們暫時看成是細(xì)胞,我們進(jìn)行MaybeMark的標(biāo)記(Blue)。否則的話,我們需要考慮,一些不是Mark和MaybeMark點的*lpSrc==0我們區(qū)別一下賦值為1,*lpSrc==255我們區(qū)別一下賦值為254,*(lpSrc+1)==255我們區(qū)別一下賦值為254.這樣的話,我們在后面判斷是否為Mark點的時候,我們只需要判斷*lpSrc是否為0就可以了,判斷MaybeMark點時只需要判斷*(lpSrc)是否為255就可以了。對于邊緣的判斷只需要判斷*(lpSrc+1)是否為255就可以了。將細(xì)胞標(biāo)記為Mark用紅色(255,0,0)標(biāo)記出來,將可能是的細(xì)胞標(biāo)記為MayBeMark用藍(lán)色(0,0,255)標(biāo)記出來。將MayBeMarkToMark的區(qū)域用亮紅(128,0,0)表示,將不可能是細(xì)胞的區(qū)域、細(xì)胞邊界分別用綠色標(biāo)記出來。操作過程:根據(jù)H、S的歐幾里得距離sqrt(s2+h2)來大致的確定哪些是細(xì)胞(Mark)和可能是細(xì)胞(MaybeMark)的點。根據(jù)MaybeMark點周圍的情況,如果它的上下左右四個方向有Mark點,則將MaybeMark點變成Mark點。用Sobel算子來做邊緣的提取邊界(0,255,255)(255,255,0),使用3*3的模板,使用歐幾里得距離來判斷是否為邊緣。兩種Sobel算子如下:主要代碼如下:doubletmp1=pi*el[0]+2*pi*el[1]+pi*el[2]-pi*el[6]-2*pi*el[7]-pi*el[8];doubletmp2=pi*el[0]+2*pi*el[3]+pi*el[6]-pi*el[2]-2*pi*el[5]-pi*el[8];doubleedge=sqrt(tmp1*tmp1+tmp2*tmp2); if(edge>edgeDoor) *(lpDst+1)=255;//Sobel判斷該點是否edge//edgeDoor=40edge濾波就是去除全邊緣點(四周都是背景或邊緣)(強(qiáng)度為5)5、二值化基本思想:將原有彩色圖像變換為二值圖像,其中細(xì)胞0*80(128)用Gray(灰色)標(biāo)記出來,邊緣0*F0(240)用Bright(亮色)標(biāo)記出來,其他表示為0。主要代碼:填洞將細(xì)胞中或者細(xì)胞相鄰的地方的較小的背景填成細(xì)胞的背景,填完的細(xì)胞背景的灰度值是129,因為都被訪問過了,然后將邊緣去掉。填洞的基本思想:首先將細(xì)胞或邊緣內(nèi)的黑點置為vistied=0*01 ,以該黑點為中心,在其上下左右側(cè)進(jìn)行訪問是否有未訪問的黑點,若有則將上方黑點壓棧,且上下左右側(cè)的黑點置已訪問。將堆棧頂端的數(shù)據(jù)彈出,作為新的種子進(jìn)行擴(kuò)散,即以該元素為基點,判斷其周圍是否存在未訪問黑點,若有則繼續(xù)壓棧,重復(fù)操作。直到找到最后一點,此點四周均不存在未訪問黑點,結(jié)束訪問。若洞像素數(shù)小于100大于50,洞內(nèi)像素數(shù)及其初進(jìn)棧的點(56,(409,222))時,則進(jìn)行填洞。填洞的過程就是將非mark點轉(zhuǎn)化為mark點。主要標(biāo)記訪問代碼:填洞函數(shù)主要代碼分析:填完洞后,進(jìn)行下面操作:如果圖像中只有已訪問黑點0*01則將其恢復(fù)成0;如果圖像中只有Edge點0*f0則將Edge置為黑點。這樣圖像中只有黑色的背景以及灰色的細(xì)胞mark(0*80)點。主要代碼:7、收縮收縮的目的是為了方便計數(shù)。通過掃描圖像,對圖像進(jìn)行預(yù)先的3次腐蝕,判斷所生成邊界點,然后根據(jù)原理判定是否標(biāo)注該點,存放所標(biāo)志的中心點,便于統(tǒng)計細(xì)胞個數(shù)及計算細(xì)胞半徑。由Mark生成邊界,我們有四鄰域生成邊界和八鄰域生成邊界。判斷該點是否為Mark點,如果是Mark點的話,我們判斷i、j是否是我們選取圖片的邊界,如果是的話,我們將該點變成邊緣點,否則我們判斷它的上下左右(周圍八個點)是否有非Mark點,如有有,則將這邊變成邊緣點,反之,不變。8鄰域收縮操作代碼(4鄰域與8鄰域思想相同):8、獲取中心點根據(jù)前面所作工作統(tǒng)計獲得的中心點個數(shù),去掉一系列不符合要求的點得出最終的細(xì)胞個數(shù)、細(xì)胞的平均半徑和平均面積,用對話框輸出統(tǒng)計結(jié)果。操作過程如下:首先我們要去除訪問標(biāo)志,是我們先前一次在判斷是否需要保存點的時候(MarkIt(inti,intj)),我們將邊緣點都標(biāo)記成訪問過了,這時在處理下一次遍歷圖片發(fā)現(xiàn)中心點的時候,我們要進(jìn)行判斷點是否要保存就沒有辦法做了,所以在沒進(jìn)行一次圖片的遍歷之前我們都需要去除訪問標(biāo)志。主要代碼:*lpSrc&=NO_VISITED;//0*fe//清除visited標(biāo)志最后位置0操作需要判斷是否是邊界以外的點,這里我們只處理邊界內(nèi)部的點,對于邊界外部的點不加以查找中心點。對于內(nèi)部的點,我們先要判斷是否是孤立的邊緣點,即判斷該邊緣點的上下左右四個點都不是Mark點和邊緣點我們認(rèn)為是孤立的邊緣點,但是我們在這里也要去除半徑不大于2的孤立點,因為我們認(rèn)為它的半徑太小,是噪聲。如果是半徑大于2的孤立點,我們對他進(jìn)行標(biāo)記成中心點,對半徑做一點補(bǔ)償(pt.radius=k+pre_shrink_count+4,4為補(bǔ)償)。然后在入隊。主要代碼如下: { if(k<3)//如果進(jìn)行第一次收縮即消失的點則認(rèn)為該點是噪點,不進(jìn)行保存直接進(jìn)行下一次收縮 continue; //孤立的點 *lpSrc|=CENTERED;//0*2對孤立點加上中心點標(biāo)志0*f2//后面shrink時為0*02 //保存一下CENTER_POINT信息(圓心,半徑) pt.*=i; pt.y=j; pt.radius=k+pre_shrink_count+4;//+4放大補(bǔ)償,k為把此圓收縮到一點所經(jīng)歷的收縮次數(shù) points_temp.push_back(pt); continue; }需要判斷是否需要保存該點,我們在判斷它的上下左右是否有沒有訪問過的邊緣點,這里我們運(yùn)用遞歸函數(shù)來找相連通的邊緣點,如果是全邊緣點的時候我們就需要保存,即將m_bFullEdge=1。在保存的函數(shù)中我們將該點變成中心點,然后半徑補(bǔ)償然后我們來對該點入隊(保存),然后將該點設(shè)置成沒有訪問過的點,因為下面在做該點的上下左右是否為訪問過的,訪問過才保存,因為這個點已經(jīng)保存過了,所以要將保存過的點設(shè)置成沒有訪問過,我們必須將這點變成沒有訪問過。然后判斷該點的周圍八點是否是訪問過的,如果訪問過就保存該點,這里也是運(yùn)用遞歸函數(shù)來實現(xiàn)的。對中心點處理:獨(dú)立的中心點直接存儲相鄰的中心點通過遞歸求質(zhì)心作為圓心,最大半徑作為新的半徑,合并各中心為一點主要代碼如下: pt.*=tot_*/tot_num;//質(zhì)心 pt.y=tot_y/tot_num; pt.radius=ma*_radius;//取最大半徑作為質(zhì)點中心點半徑 *(lpSrc-(pt.y-j)*lLineBytes+pt.*-i)|=CENTERED;//質(zhì)點置為中心點 points.push_back(pt);c)相近但不相鄰的點,求質(zhì)心為圓心,最大半徑為半徑(直到無相近點)主要代碼如下: if(abs(*0-*)+abs(y0-y)<10)//相近 { /*pt=points.at(j); if(points.at(i).radius<points.at(j).radius) pt=points.at(i);*/ points.at(i).*=(*+*0)/2;//取均值,保存最大半徑 points.at(i).y=(y+y0)/2; points.at(i).radius=ma*(points.at(i).radius,points.at(j).radius)+4; pt=pt=points.at(i);d)在無相近點的情況下,若半徑小于8,則刪除。主要代碼如下: if(bdelete) { msg.Format("去掉潛在的錯誤(圓r<8Redpen)后數(shù)目=%d",m_vCenterPoints.size()); MessageBo*(msg); }e)兩圓相交,若其中一圓非相交部分面積小于50%,則刪除主要代碼如下: if(total<Pi*r0*r0*0.5)//所有的圓都不相交的部分的面積<圓面積的50%,刪除 CENTER_POINTcenterp; centerp=m_vCenterPoints.at(i);細(xì)胞計數(shù)打開我們處理前的圖片,根據(jù)前面保存中心點的隊列,我們知道中心點的位置和細(xì)胞的半徑,然后我們重新的導(dǎo)入細(xì)胞的圖片,在上面畫圓,標(biāo)出細(xì)胞。然后我們獲取細(xì)胞內(nèi)部的HSI的最大值和最小值,計算出細(xì)胞的平均面積和個數(shù)。主要代碼如下:msg.Format("共有%d個細(xì)胞,平均半徑%d,平均面積%d:H(%3.1f,%3.1f)S(%3.2f,%3.2f)I(%3.2f,%3.2f)",m_vCenterPoints.size(),(int)(totr/m_vCenterPoints.size()+.5),(int)(tota/m_vCenterPoints.size()+.5),360.0*min[0]/255.0,360.0*ma*[0]/255.0,1.0*min[1]/255.0,1.0*ma*[1]/255.0,1.0*min[2]/255.0,1.0*ma*[2]/255.0);10、All-steps可以一次性實現(xiàn)細(xì)胞識別的所有操作步驟設(shè)置控制按鍵的權(quán)限,點擊update_mand_ui,鍵入控制條件每步操作時給cellprocess設(shè)置不同數(shù)值,表示那步進(jìn)行過,只能進(jìn)行規(guī)定的下步操作,從而在運(yùn)行過程中放置按鍵誤觸導(dǎo)致程序崩潰。11、擴(kuò)展:區(qū)域選擇:建立類向?qū)В篛nButtonDown和OnButtonUp鍵入代碼:在OnDraw中添加下列代碼注意:bool變量m_bDrag要定義在view.cpp文件頭部,定義在view.h會出現(xiàn)第一次區(qū)域選擇時出現(xiàn)錯誤。添加復(fù)位按鍵:點擊該鍵后會重新讀取圖像(和圖像自動打開代碼一樣)第三部分12、各步驟結(jié)果和錯誤舉例各步驟結(jié)果圖Mark(Red)&MayBeMark(Blue)maybemarktomark(blackred)edgeinformationandedgefiltertwovaluefillholesshrinkfindcentercount出現(xiàn)的錯誤舉例:Mousemove程序中出現(xiàn)問題:1.錯誤:沒有加*include"MainFrm.h"頭文件2.錯誤errorC2248:'m_wndStatusBar':cannotaccessprotectedmemberdeclaredinclass'CMainFrame'需將protected://controlbarembeddedmembers CStatusBarm_wndStatusBar; CToolBarm_wndToolBar;protected變?yōu)閜ublic 供用戶操作使用MouseMove函數(shù)中((CMainFrame*)Af*GetMainWnd())->m_wndStatusBar.SetPaneTe*t(0,str);使str.Format中內(nèi)容顯示在標(biāo)準(zhǔn)窗口圖像的左下方barMouseMove的坐標(biāo)判決放在for循環(huán)外,鼠標(biāo)移動到圖像外,程序會崩潰。。解決:改變坐標(biāo)判決代碼的位置通見問題:在ClassView中的類視圖不見了,在FileView視圖中該類的.h和.cpp文件仍然存在解決方案:先保存workspace,然后關(guān)閉工程,刪除此工程目錄中的.ncb文件,重新打開workspace原因:classview顯示混亂在類中添加的成員變量和成員函數(shù)不能顯示出來,即使顯示出來了變量或函數(shù),雙擊后不能跳至正確的位置。Edgeinformation中出現(xiàn)問題正常 不正常memcpy(lpNewDIBBits,lpSrc,lHeight*lLineBytes);代碼應(yīng)放在圖像處理前,參考圖像是初始狀態(tài)的圖像,把第一步的四個小步驟分開寫在不同的函數(shù)內(nèi)時,因為每一小步的操作都會改變圖像的狀態(tài),如果把:memcpy(lpNewDIBBits,lpSrc,lHeight*lLineBytes);寫在maybemark_to_mark之后則參考圖像就不是原始圖像發(fā)現(xiàn):做到shrink時,看到收縮后的圖像效果很差,和標(biāo)準(zhǔn)收縮圖像相差較大,經(jīng)調(diào)試后發(fā)現(xiàn)問題(沒注意ppt最后一頁有,老師在qq群在中也提到過)。Shrink操作后,關(guān)閉圖像,出現(xiàn)問題GenEdge4()函數(shù)中出現(xiàn)問題for(intj=0;j<lHeight;j++)//可以 { lpSrc=(unsigned
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅行學(xué)習(xí)與研學(xué)活動安排計劃
- 社會實踐小班社區(qū)活動的開展計劃
- 人力資源的發(fā)展與管理計劃
- 2025年企業(yè)管理服務(wù)項目建議書
- 2025年白喉、百日咳、破傷風(fēng)、乙肝四聯(lián)制劑合作協(xié)議書
- 跨國業(yè)務(wù)數(shù)據(jù)轉(zhuǎn)換合規(guī)指南
- 基于人工智能的智能家居設(shè)計合作協(xié)議
- 服裝設(shè)計行業(yè)服裝設(shè)計版權(quán)協(xié)議
- 2025年抗帕金森病藥項目建議書
- Pipemidic-acid-trihydrate-Standard-生命科學(xué)試劑-MCE
- 現(xiàn)場施工人員安全責(zé)任協(xié)議書(2篇)
- 2024黑龍江公務(wù)員考試【A類、B類、省直、筆試】四套真題及答案
- 2025年中國高價HPV疫苗行業(yè)競爭格局分析及投資規(guī)劃研究報告
- 醫(yī)院感染與醫(yī)療器械消毒
- 2025年春新北師大版物理八年級下冊課件 第七章 運(yùn)動和力 第四節(jié) 同一直線上二力的合成
- 智能客服系統(tǒng)中人工智能技術(shù)的應(yīng)用
- 2025年公司年會活動總結(jié)樣本(3篇)
- 2024年公務(wù)員考試青岡縣《行政職業(yè)能力測驗》深度預(yù)測試卷含解析
- 冠脈介入治療術(shù)后護(hù)理常規(guī)
- 村衛(wèi)生室2025年初工作計劃
- 派出所校園安全創(chuàng)新
評論
0/150
提交評論