全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1483
推到 Plurk!
推到 Facebook!

图像分析(自动记数)

尚未結案
chenliyan163
一般會員


發表:30
回覆:30
積分:12
註冊:2003-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-28 09:03:40 IP:61.175.xxx.xxx 未訂閱
如何用delphi将下面那幅图像用电脑自动来扫描出那里面有多少个酵母菌 http://www.my2000.biz/temp1/1.jpg 扫出的结果像这样: http://www.my2000.biz/temp1/3.jpg 注:本人为了节省空间特用JPG放在网上,在处理的时候用的是BMP格式的
aquarius
資深會員


發表:3
回覆:347
積分:330
註冊:2003-05-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-28 10:39:30 IP:211.23.xxx.xxx 未訂閱
引言: 如何用delphi将下面那幅图像用电脑自动来扫描出那里面有多少个酵母菌 http://www.my2000.biz/temp1/1.jpg 扫出的结果像这样: http://www.my2000.biz/temp1/3.jpg 注:本人为了节省空间特用JPG放在网上,在处理的时候用的是BMP格式的
去查查影像辨識的書吧!! 這麼大的題目, 不是三言兩語就可以解決的!! 光是要程式可以 "認" 酵母菌的外觀就是一個大麻煩, 何況你的圖還可能有一堆的酵母菌擠在一起. ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com
chenliyan163
一般會員


發表:30
回覆:30
積分:12
註冊:2003-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-28 17:27:19 IP:61.175.xxx.xxx 未訂閱
那个我用二值化,可以将图像中的细菌扫出来, 就是不知道怎样才可以让计算机知道,是否可以算是一个细菌 下面是一个二值化的源代码: const red: cardinal = $FF; blue: cardinal = $FF0000; var rgb: integer; i, j, l: Integer; begin l:=((255 255 255) *TrackBar1.Position) div 100; for i := 0 to image1.picture.bitmap.height-1 do begin rgb := integer(image1.picture.bitmap.scanline[i]); for j := 0 to image1.picture.bitmap.width-1 do begin if pbyte(rgb)^ pbyte(rgb 1)^ pbyte(rgb 2)^>l then // move(blue, pbyte(rgb)^, 3) else move(red, pbyte(rgb)^, 3); inc(rgb, 3); end; end; form1.Refresh; end;
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-29 04:18:28 IP:203.222.xxx.xxx 未訂閱
aquarius 都說了 圖形辨識, 牽涉知識層面太廣 你又不是說已經有部分成果,只是卡住在某部分 而是完全沒東西 二值化是圖形處理的基本問題,離辨識物體還差得很遠 自己去找書念一下吧 這種尚未普及的技術(也就是說寫這種程式還很賺錢),是沒人會幫你的,因為會寫圖形辨識的人,可沒空處理沒錢賺的事
chenliyan163
一般會員


發表:30
回覆:30
積分:12
註冊:2003-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-30 11:02:24 IP:61.175.xxx.xxx 未訂閱
楼上的仁兄说得有道理,但对于现在的我不知道如何下手,请各位大侠给我指点,谢谢, 發表人 - chenliyan163 於 2003/10/30 11:03:47
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-30 16:53:05 IP:203.203.xxx.xxx 未訂閱
去書局或圖書館找有關影像處理的書 記得要去那些有提供大專院校書籍的書店,一般書局專業的書太少,通常大學有資訊電子相關科系的附近書店會有較多專業書籍,可找資訊或電子類專業圖書,可找到不少,但以英文居多,而英文的內容也較豐富紮實
chenliyan163
一般會員


發表:30
回覆:30
積分:12
註冊:2003-09-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-31 10:20:24 IP:61.175.xxx.xxx 未訂閱
好的,非常感谢,所有楼上的仁兄,小弟这个有个想法,想你们指导指导,是这样的: 我先将图像进行二值化(http://www.my2000.biz/temp1/1.jpg)把图像分成黑和白两种,然后对图像的第10行开始进行扫描,当发现有一个黑点时,对X轴的另一点进行扫描(也就是细菌的直径),假如当那个点也是黑色的,那么再取细菌的中心点,在Y轴(细菌中心点下面)进行下面扫描,扫完再对中心点以上进行扫描,当发现都扫到黑点时,就判断此是细菌,发现第一个细菌后跳过细菌直径的点,再进行扫描,直到全部扫完为止,下面是我的代码:()请各位仁兄帮我看看,里面还存在着什么问题,谢谢各位. procedure TForm1.y1Click(Sender: TObject); var line_x,line_y:integer; scarcity_x,overstep_x:integer; scarcity_up_y,overstep_up_y:integer; scarcity_down_y,overstep_down_y:integer; origin:integer;//原点 begin count_bacilli:=1; //初始化 line_y:=10; while line_y<=image1.picture.bitmap.height-1 do begin line_x:=10; while line_x<=image1.picture.bitmap.Width-10 do begin if form1.Image1.Canvas.Pixels[line_x,line_y]=0 then //当为0时,此时点为黑色(找到第一个黑点) begin form1.Image1.Canvas.Pixels[line_x,line_y]:=255; scarcity_x:=trunc(line_x TrackBar2.Position*0.7); overstep_x:=trunc(line_x TrackBar2.Position*1.3); while scarcity_x<=overstep_x do begin if form1.Image1.Canvas.Pixels[scarcity_x,line_y]=0 then //找到第二个黑点 begin origin:=line_x trunc((scarcity_x-line_x) div 2); //计算出细菌的中心点 scarcity_down_y:=line_y 10; overstep_down_y:=line_y 20; while scarcity_down_y<=overstep_down_y do //对Y轴进行搜寻(下) begin if form1.Image1.Canvas.Pixels[origin,scarcity_down_y]=0 then begin form1.Image1.Canvas.Pixels[origin,scarcity_down_y]:=255; scarcity_up_y:=line_y-10; overstep_up_y:=line_y-20; while overstep_up_y<=scarcity_up_y do //对Y轴进行搜寻(上) begin if form1.Image1.Canvas.Pixels[origin,scarcity_up_y]=0 then begin form1.Image1.Canvas.Pixels[origin,overstep_up_y]:=255; form1.Image1.Canvas.TextOut(line_x 5,line_y-5,inttostr(count_bacilli)); //line_x:=line_x 1; //找到点后进行跳过这个点 count_bacilli:=count_bacilli 1; end; overstep_up_y:=overstep_up_y 1; end; end; scarcity_down_y:=scarcity_down_y 1; end; end else begin break; end; scarcity_x:=scarcity_x 1; end; end; line_x:=line_x 1; end; line_y:=line_y 29; end; form1.Label2.Caption:=inttostr(count_bacilli); end;
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-31 11:09:57 IP:203.203.xxx.xxx 未訂閱
基本上,對你的做法沒有多大的意見,因為只要做得出來你的結果就可以 但是要注意 1.其實你做的是圓形或近似圓形的判斷,在影像判斷的書中,剛開始的就是判斷幾何圖形,圓形,方形...等,直接翻書轉成程式碼會有較佳的執行效果,因為你的判斷上仍是有著瑕疵,就是說雖然演算法理論是正確的但你在判斷處理時,出現誤判的機會能高於50%,這是依你的程式演算法的推斷,因為可能判斷出來的不是圓形,只是不相干的數條小小線段或雜點,這是可以想像的,所以在判斷上應該用多點與不定位置取樣或是區域線段判斷來增加客觀率,以確保找到的點是圓形的一部分(當然圖中的細菌不一定是正圓形,也要考慮重疊之類的狀況) 2.再來,就是在二值化的演算方式,雖然是很簡單的,但是二值化的效果卻是影響很大的,所以與其在二值化後在做影像最佳化之類的處理,不如一次就在二值化時完成,越是清處無雜點,無雜線的圖形,在辨認的演算程式上就越簡單 因為目前影像辨認的領域沒有一個共同的標準程式可以通用於各種狀況,所以你還是要依你的需求一步一步自己來設計
chenliyan163
一般會員


發表:30
回覆:30
積分:12
註冊:2003-09-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-11-01 19:43:31 IP:61.175.xxx.xxx 未訂閱
首先非常感谢这位仁兄.在这向您说声谢谢! 先告诉您一个好消息:我试了一下的,捕获率在80%以上.(因为做为酵母的话本就是圆的或隋圆的,所以相对而言就不用考虑那么多了), 对于您第二个想法,我倒也有类似的想法,正准备试试看. 顺便问一下,如何将form1.Image1.Canvas.Pixels[x,y]转化成整形和字符串形
系統時間:2024-05-08 2:39:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!