简单的工作室

血液红细胞识别系统源程序

软件类型:国产软件 授权方式:共享软件 界面语言:简体中文 软件大小:3.00 MB 文件类型:.rar 运行环境:Win2003,WinXP,Win2000,Win9X 软件等级:☆☆☆☆☆ 发布时间:2010-12-07 官方网址:http://www.jiandande.com 演示网址:http://www.jiandande.com 下载次数:
软件介绍

       血液红细胞识别与统计系统 华东交通大学基础科学学院 学校弄出的作品还是挺不错的,采用MDI子窗体架构形式,而且代码也比较简洁,挺好的学习图像分析的delphi源代码,其实现阶段图形识别原理基本上是分三个步骤:第一取出图片并在程序里显示(比如下载网站验证码图片等);第二对图像进行处理(边缘检测、分割、图形灰度化二值化等) ;第三是通过找图片像素颜色的特征值,生成图像特征码(这些特征码无法使000000011100111000111等一些模式)。记得以前弄过一次百家乐发牌的识别程序,我是通过pix:=getpixel(dc,Xpos,Ypos)函数 直接找屏幕牌位置的像素颜色,然后把RGB颜色值相加形成一个特征码,这样进行图像对比。可是我完成后发现,这样的方法在直接电脑上完全可以识别52张扑克牌的,但是放到别的电脑上,有些电脑是识别不出来的,我有次放到网吧机子上去测试,又可以正确识别扑克牌的,但是放到公司一台是纯平显示器电脑上,就是识别不出来。同样的分辨率设置,后来比较了下特征码,发现在自己电脑上取出的RGB值是255255255 在另外一台电脑的值可能是255253254,很奇怪,难道还跟显卡配置有关?一直比较纠结这个问题。所以找特征码的时候,还是先对图像进行二值化等处理,结果可能更好点吧。。。

 

源码里主要是对图像进行二值化,灰度化,中值滤波进行处理,这些二值化等算法还是值得学习下的。

-------图形灰度化delphi代码---------------------------------------
 
	
  1. procedure TMDIChild.GrayClick(Sender: TObject); 
  2. var 
  3.     p: pbyteArray; 
  4.     x, y: Integer; 
  5.     Bmp: TBitmap; 
  6.     Gray: Integer; 
  7. begin 
  8.     Bmp :TBitmap.Create; 
  9.     Bmp.Assign(BloodImage.Picture.Bitmap); 
  10.     Bmp.PixelFormat :pf24bit;  //转为24位真彩色处理 
  11.     for y :0 to Bmp.Height - 1 do 
  12.     begin 
  13.         //获取每一行像素信息 
  14.         p :Bmp.scanline[y]; 
  15.         for x :0 to Bmp.Width - 1 do 
  16.         begin 
  17.             //这里采用方法三 
  18.             //即 Y=0.3R+059G+0.11B 
  19.             Gray :Round(p[3 * x + 2] * 0.3 + p[3 * x + 1] * 0.59 
  20.                 + p[3 * x] * 0.11); 
  21.             //由于是24位真彩色,故一个像素点为三个字节 
  22.             p[3 * x + 2] :byte(Gray); 
  23.             p[3 * x + 1] :byte(Gray); 
  24.             p[3 * x] :byte(Gray); 
  25.            end; 
  26.     end; 
  27.     BloodImage.Picture.Bitmap :Bmp
  28.     Bmp.Free; 
  29. end; 
 

////-----------------------------图形二值化源码---------------------------------------------------------------/////

 

  1. procedure TMDIChild.TwoValueClick(Sender: TObject); 
  2. var 
  3.     p: PByteArray; 
  4.     Gray, x, y,threshold: Integer; 
  5.     Bmp: TBitmap; 
  6. begin 
  7.     withdrawBmp.Assign(BloodImage.Picture.Bitmap); 
  8.     withdraw.Enabled :=true
  9.     mainForm.ToolButton4.Enabled:=true
  10.     threshold:=strtoint(DistributionForm.Edit1.Text); 
  11.    //strtoint(DistributionForm.Edit1.Text); 
  12.     Bmp :TBitmap.Create; 
  13.     Bmp.Assign(BloodImage.Picture.Bitmap); 
  14.     //设置为24位真彩色 
  15.     Bmp.PixelFormat :pf24Bit
  16.     randomize; 
  17.     for y :0 to Bmp.Height - 1 do 
  18.     begin 
  19.         p :Bmp.scanline[y]; 
  20.         for x :0 to Bmp.Width - 1 do 
  21.         begin   //算出每一点的灰度值 
  22.            if (p[x * 3 + 2])=(p[x * 3 + 1]) then 
  23.             Gray :Round(p[x * 3 + 2]) else 
  24.             Gray :Round(p[x * 3 + 2] * 0.3 + p[x * 3 + 1] * 0.59 + p[x 
  25.                 * 3] * 0.11); 
  26.             if gray > threshold then //全局阀值128 
  27.             begin 
  28.                 p[x * 3] :=255; p[x * 3 + 1] :=255; p[x * 3 + 2] :=255
  29.             end 
  30.             else 
  31.             begin 
  32.                 p[x * 3] :=0; p[x * 3 + 1] :0;  p[x * 3 + 2] :0
  33.             end; 
  34.         end; 
  35.     end; 
  36.   BloodImage.Picture.Bitmap.Assign(Bmp); 
  37.     Bmp.Free; 
  38.      HoleFilling.Enabled :=true
  39. end; 

 

下载地址
下载说明

☉推荐使用迅雷下载本站软件,使用 WinRAR v3.10 以上版本解压本站软件。
☉如果这个软件总是不能下载,请选择主站服务器下载,或者后面的迅雷高速下载!!
☉下载本站资源,如果服务器暂不能下载请过一段时间重试!
☉如果遇到什么问题,可以发布留言提问,我们将在那里提供更多 、更好的资源!
☉本站提供的一些商业软件是供学习研究之用,如用于商业用途,请购买正版。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐软件