5-8万年薪顶级嵌入式,京沪深就业地 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何查询图像上与已知匹配的一块?查询并提取 vc实现

楼主chentaoch(chentaoch)2002-06-15 22:13:35 在 VC/MFC / 基础类 提问

急急急急急急!!! 问题点数:0、回复次数:9Top

1 楼jiangsheng(蒋晟.Net[MVP])回复于 2002-06-15 22:31:08 得分 0

?  
  GdiPlus:Bitmap::LockBitsTop

2 楼chentaoch(chentaoch)回复于 2002-06-16 15:20:19 得分 0

你好,能不能详细点Top

3 楼daehappy(追求120%结贴)回复于 2002-06-16 17:36:43 得分 0

up!关注!Top

4 楼chenybin(小马)回复于 2002-06-17 00:07:45 得分 0

我来帮你顶一下  
  希望有高手来  
  UPTop

5 楼itaolu(老罗)回复于 2002-06-17 00:49:12 得分 0

先看看快速傅立叶变换、DCT、DHT方面的书吧,这个问题是属于数字信号处理方面的。Top

6 楼chentaoch(chentaoch)回复于 2002-06-17 12:40:34 得分 0

急急急。  
  谁能告诉我全代码,   要被炒了!!!Top

7 楼chentaoch(chentaoch)回复于 2002-06-17 12:44:32 得分 0

可能我没讲清楚,  
   
  是二值图像  
  Top

8 楼zz443(留连)回复于 2002-06-17 20:30:47 得分 0

可以使用模板匹配,已知的作为模板,遍历全图,找到相似性测度最大的区域即为你所要寻找的东东。  
  具体源程序及其算法介绍,你可以看看《Visual   C++数字图像处理》人民邮电出版社   何斌   马天予等人编著Top

9 楼zz443(留连)回复于 2002-06-17 20:38:18 得分 0

/*************************************************************************  
    *  
    *   函数名称:  
    *       TemplateMatchDIB()  
    *  
    *   参数:  
    *       LPSTR   lpDIBBits         -   指向源DIB图像指针  
    *       LPSTR   lpDIBBitsBK     -   指向背景DIB图像指针  
    *       LONG     lWidth               -   源图像宽度(象素数)  
    *       LONG     lHeight             -   源图像高度(象素数)  
    *       LONG     lTemplateWidth               -   模板图像宽度(象素数)  
    *       LONG     lTemplateHeight             -   模板图像高度(象素数)  
    *  
    *   返回值:  
    *       BOOL                               -   运算成功返回TRUE,否则返回FALSE。  
    *  
    *   说明:  
    *   该函数用于对图像进行模板匹配运算。  
    *    
    *   要求目标图像为255个灰度值的灰度图像。  
    ************************************************************************/  
   
  BOOL   WINAPI   TemplateMatchDIB   (LPSTR   lpDIBBits,   LPSTR   lpTemplateDIBBits,   LONG   lWidth,   LONG   lHeight,  
      LONG   lTemplateWidth,LONG   lTemplateHeight)  
  {  
  //   指向源图像的指针  
  LPSTR lpSrc,lpTemplateSrc;  
   
  //   指向缓存图像的指针  
  LPSTR lpDst;  
   
  //   指向缓存DIB图像的指针  
  LPSTR lpNewDIBBits;  
  HLOCAL hNewDIBBits;  
   
  //循环变量  
  long   i;  
  long   j;  
  long   m;  
  long   n;  
   
  //中间结果  
  double   dSigmaST;  
  double   dSigmaS;  
  double   dSigmaT;  
   
  //相似性测度  
  double   R;  
   
  //最大相似性测度  
  double   MaxR;  
   
  //最大相似性出现位置  
  long   lMaxWidth;  
  long   lMaxHeight;  
   
  //像素值  
  unsigned   char   pixel;  
  unsigned   char   templatepixel;  
   
  //   图像每行的字节数  
  LONG   lLineBytes,lTemplateLineBytes;  
   
  //   暂时分配内存,以保存新图像  
  hNewDIBBits   =   LocalAlloc(LHND,   lWidth   *   lHeight);  
   
  if   (hNewDIBBits   ==   NULL)  
  {  
  //   分配内存失败  
  return   FALSE;  
  }  
   
  //   锁定内存  
  lpNewDIBBits   =   (char   *   )LocalLock(hNewDIBBits);  
   
  //   初始化新分配的内存,设定初始值为255  
  lpDst   =   (char   *)lpNewDIBBits;  
  memset(lpDst,   (BYTE)255,   lWidth   *   lHeight);  
   
  //   计算图像每行的字节数  
  lLineBytes   =   WIDTHBYTES(lWidth   *   8);  
  lTemplateLineBytes   =   WIDTHBYTES(lTemplateWidth   *   8);  
   
  //计算dSigmaT  
  dSigmaT   =   0;  
  for   (n   =   0;n   <   lTemplateHeight   ;n++)  
  {  
  for(m   =   0;m   <   lTemplateWidth   ;m++)  
  {  
  //   指向模板图像倒数第j行,第i个象素的指针  
  lpTemplateSrc   =   (char   *)lpTemplateDIBBits   +   lTemplateLineBytes   *   n   +   m;  
  templatepixel   =   (unsigned   char)*lpTemplateSrc;  
  dSigmaT   +=   (double)templatepixel*templatepixel;  
  }  
  }  
   
  //找到图像中最大相似性的出现位置  
  MaxR   =   0.0;  
  for   (j   =   0;j   <   lHeight   -   lTemplateHeight   +1   ;j++)  
  {  
  for(i   =   0;i   <   lWidth   -   lTemplateWidth   +   1;i++)  
  {  
  dSigmaST   =   0;  
  dSigmaS   =   0;  
   
  for   (n   =   0;n   <   lTemplateHeight   ;n++)  
  {  
  for(m   =   0;m   <   lTemplateWidth   ;m++)  
  {  
  //   指向源图像倒数第j+n行,第i+m个象素的指针  
  lpSrc     =   (char   *)lpDIBBits   +   lLineBytes   *   (j+n)   +   (i+m);  
   
  //   指向模板图像倒数第n行,第m个象素的指针  
  lpTemplateSrc     =   (char   *)lpTemplateDIBBits   +   lTemplateLineBytes   *   n   +   m;  
   
  pixel   =   (unsigned   char)*lpSrc;  
  templatepixel   =   (unsigned   char)*lpTemplateSrc;  
   
  dSigmaS   +=   (double)pixel*pixel;  
  dSigmaST   +=   (double)pixel*templatepixel;  
  }  
  }  
  //计算相似性  
  R   =   dSigmaST   /   (   sqrt(dSigmaS)*sqrt(dSigmaT));  
  //与最大相似性比较  
  if   (R   >   MaxR)  
  {  
  MaxR   =   R;  
  lMaxWidth   =   i;  
  lMaxHeight   =   j;  
  }  
  }  
  }  
   
  //将最大相似性出现区域部分复制到目标图像  
  for   (n   =   0;n   <   lTemplateHeight   ;n++)  
  {  
  for(m   =   0;m   <   lTemplateWidth   ;m++)  
  {  
  lpTemplateSrc   =   (char   *)lpTemplateDIBBits   +   lTemplateLineBytes   *   n   +   m;  
  lpDst   =   (char   *)lpNewDIBBits   +   lLineBytes   *   (n+lMaxHeight)   +   (m+lMaxWidth);  
  *lpDst   =   *lpTemplateSrc;  
  }  
  }  
   
  //   复制图像  
  memcpy(lpDIBBits,   lpNewDIBBits,   lWidth   *   lHeight);  
   
  //   释放内存  
  LocalUnlock(hNewDIBBits);  
  LocalFree(hNewDIBBits);  
   
  //   返回  
  return   TRUE;  
  }  
  Top

相关问题

  • 求CT图像特征提取的源代码(VC实现)
  • 高分求助!求CT图像特征提取的源代码(VC实现)
  • 用VC画三维图像
  • vc与图像处理
  • 关于一组立体图像匹配的问题
  • 图像颜色快速优化提取算法???
  • 请教图像边缘提取的问题
  • 请问图像处理中提取轮廓的办法
  • 求图像专题提取的算法,100分
  • 如何从一幅图像中提取数字?

关键词

  • 图像
  • 相似性
  • 模板
  • 指针
  • 内存
  • hnewdibbits
  • 测度
  • 指向
  • maxr
  • lheight

得分解答快速导航

  • 帖主:chentaoch

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
x 提问