文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C/C++Visual C++ 实现数字化图像的分割
精品推荐
特别推荐
·C语言编程易犯毛病集合
·C语言编程常见问题解答(目录)
·C#程序开发中的常用函数汇总
·C/C++笔试、面试题目大汇总
·Beej的网络socket编程指南
·socket编程原理
·C语言的常用库函数使用方法分析及用途
·在C语言中如何处理时间和日期
·C++设计模式之Singleton
·VC++动态链接库编程之MFC扩展 DLL
热点TOP10
·进程和线程编程
·C语言编程易犯毛病集合
·打字游戏
·Awk 基础入门:Awk 实例编程
·asp.net中调用javascript函数实现多功能日期控件示例
·C语言编程常见问题解答之常用函数的包含文件(1)
·C# GridView 排序及分页
·C #中的几个线程同步对象方法
·无废话C#设计模式之三:Abstract Factory
·C# DataGridView隔行显示不同的颜色

Visual C++ 实现数字化图像的分割

日期:2007年12月28日 作者: 查看:[大字体 中字体 小字体]



  求梯度时对于平方和运算及开方运算,可以用两个分量的绝对值之和表示,即: 

   Visual C++ 实现数字化图像的分割(图六)

  Sobel梯度算子是先做成加权平均,再微分,然后求梯度,即:

    △xf(x,y)= f(x-1,y+1) + 2f(x,y+1) + f(x+1,y+1)- f(x-1,y-1) - 2f(x,y-1) - f(x+1,y-1);
    △yf(x,y)= f(x-1,y-1) + 2f(x-1,y) + f(x-1,y+1)- f(x+1,y-1) - 2f(x+1,y) - f(x+1,y+1);
    G[f(x,y)]=△xf(x,y)+△yf(x,y);

  上述各式中的像素之间的关系见图二
   F(x-1,y-1) F(x,y-1) F(x+1,y-1) F(x-1,y) F(x,y) F(x+1,y) F(x-1,y+1) F(x,y+1) F(x+1,y+1)     图二 Sober算子中各个像素点的关系图

  我在视图类中定义了响应菜单命令的边缘检测Sobel算子实现灰度图像边缘检测的函数(图像数据的获取可以参见我在天极网上发表的的相关文章):

void CDibView::OnMENUSobel()
{
 CClientDC pDC(this);
HDC hDC=pDC.GetSafeHdc();//获取当前设备上下文的句柄;
SetStretchBltMode(hDC,COLORONCOLOR);
HANDLE data1handle;
 LPDIBHDRTMAPINFOHEADER lpDIBHdr;
 CDibDoc *pDoc=GetDocument();
 HDIB hdib;
 unsigned char *lpDIBBits;
 unsigned char *data;
 hdib=pDoc->m_hDIB;//得到图象数据;
 lpDIBHdr=(LPDIBHDRTMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);
 lpDIBBits= lpDIBHdr +* (LPDWORD)lpDIBHdr + 256*sizeof(RGBQUAD);
 //得到指向位图像素值的指针;
data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpDIBHdr->biWidth*8)*lpDIBHdr->biHeight); //申请存放处理后的像素值的缓冲区
data=(unsigned char*)GlobalLock((HGLOBAL)data1handle);
 AfxGetApp()->BeginWaitCursor();
 int i,j,buf,buf1,buf2;
 for( j=0; jbiHeight; j++)//以下循环求(x,y)位置的灰度值
  for( i=0; ibiWidth; i++)
 {
   if(((i-1)>=0)&&((i+1)biWidth)&&((j-1)>=0)&&((j+1)biHeight))
   {//对于图像四周边界处的向素点不处理
    buf1=(int)*(lpDIBBits+(i+1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j-1))
     +2*(int)*(lpDIBBits+(i+1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j))
      +(int)(int)*(lpDIBBits+(i+1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j+1));
    buf1=buf1-(int)(int)*(lpDIBBits+(i-1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j-1))
     -2*(int)(int)*(lpDIBBits+(i-1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j))
     -(int)(int)*(lpDIBBits+(i-1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j+1));

    //以上是对图像进行水平(x)方向的加权微分

    buf2=(int)(int)*(lpDIBBits+(i-1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j+1))
     +2*(int)(int)*(lpDIBBits+(i)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j+1))
     +(int)(int)*(lpDIBBits+(i+1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j+1)); 
    buf2=buf2-(int)(int)*(lpDIBBits+(i-1)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j-1))
     -2*(int)(int)*(lpDIBBits+(i)*WIDTHBYTES(lpDIBHdr->biWidth*8)+(j-1))

上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 




上一篇:用Win32 API枚举应用程序窗口和进程

下一篇:C语言嵌入式系统编程修炼之内存操作

相关文章:
·如何实现局域网打印机共享
·Vista中硬盘分区合并分割全攻略
·水晶报表的jsp实现
·Coreldraw图像文件导入PS三种方法
·用Excel实现定时提醒
·利用VB6.0实现五线谱作曲工具
·Flash教程:加载图片按比例显示的实现方法
·VB实现程序的隐形
·一个只使用Winsock控件实现的Telnet程序
·C++ Builder下数据库报表Master/Detail关系功能的实现
相关软件:
·视频分割专家 V5.83
·Ultra RM Converter(Real文件转换分割,合并)V3.3.0916 汉化版
·Video Convert Master(转换,分割,合并视频)V8.0.5.20 汉化版
·TCP-IP详解卷2:实现
·Allok Video Splitter(视频文件分割)V2.2 0726 修正II版
·Super Video Splitter(视频分割工具)绿色汉化版 V3.9
·PE(*.EXE,*.DLL,*.OCX等)文件图像资源浏览器
·绿色分割 V4.0
·TCP-IP详解卷二:实现
·Cisco 3640实现VOIP配置

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot