给点思路!

解决方案 »

  1.   

    java图像分割
      

  2.   

    Bitmap   bb   =   (Bitmap)Image.FromFile("...");   
      Bitmap   sepbitmap1=   bb.Clone(new   System.Drawing.Rectangle(0,0,20,20),System.Drawing.Imaging.PixelFormat.Format32bppPArgb);   
       
    Image   image   =   System.Drawing.Image.FromFile("a.jpg",true);   
      Bitmap   bmp   =   new   Bitmap(400,400);   
      Graphics   grap   =   Graphics.FromImage(bmp);   
      grap.Clear(Color.Transparent);   
      grap.DrawImage(image,new   Rectangle(0,0,400,400));   
         如果a.jpg的大小是4000*4000,这样在新的图像中得到的就是左上角起的400*400的一部份.   
      若要10*10,则用循环就可实现   [System.Runtime.InteropServices.DllImportAttribute   (   "gdi32.dll"   )   ]   
      private   static   extern   bool   BitBlt   (   
      IntPtr   hdcDest   ,   //   目标   DC的句柄   
      int   nXDest   ,      
      int   nYDest   ,      
      int   nWidth   ,      
      int   nHeight   ,      
      IntPtr   hdcSrc   ,   //   源DC的句柄   
      int   nXSrc   ,      
      int   nYSrc   ,      
      System.Int32   dwRop   //   光栅的处理数值   
      )   ;   
         
      private   void   button1_Click(object   sender,   System.EventArgs   e)   
      {   
      try   
      {   
      string   file   =   null;   
      Bitmap   bmp   =   null;   
      IntPtr   dc1   =   IntPtr.Zero;   
      IntPtr   dc2   =   IntPtr.Zero;   
      int   row   =   2,   col   =   2;   
         
      int   left   =   0,   top   =0   ,   width   =   0,   height   =   0;   
      for(int   i=0;   i<row;   i++)   
      {   
      left   =   0;   
      top   =   i   *   ((int)(this.pictureBox1.Height   /   row));   
      for(int   j=0;   j<col;   j++)   
      {   
      file   =   @"c:\"+   i.ToString()   +   j.ToString()   +".bmp";   
      if   (j   ==   col-1)      
      width   =   this.pictureBox1.Width   -   ((int)(this.pictureBox1.Width   /   col))   *   j;   
      else   
      width   =   (int)(this.pictureBox1.Width   /   col);   
         
      if   (i   ==   row-1)      
      height   =   this.pictureBox1.Height   -   ((int)(this.pictureBox1.Height   /   row))   *   i;   
      else   
      height   =   (int)(this.pictureBox1.Height   /   row);   
         
                                                      Graphics   g1   =   this.pictureBox1.CreateGraphics();   
      bmp   =   new   Bitmap(width,   height,   g1);   
      Graphics   g2   =   Graphics.FromImage(bmp);   
      dc1   =   g1.GetHdc();   
      dc2   =   g2.GetHdc();   
         
         
      BitBlt   (dc2   ,   0   ,   0   ,   width   ,   height   ,   dc1   ,   left   ,   top   ,   13369376   )   ;   
      g1.ReleaseHdc(dc1)   ;   
      g2.ReleaseHdc(dc2)   ;   
      g1.Dispose();   
      g2.Dispose();   
      bmp.Save(file,   System.Drawing.Imaging.ImageFormat.Bmp);   
         
      left   +=   width;   
         
      }   
      }   
         
      }   
      catch(Exception   ex)   
      {   
      MessageBox.Show(ex.ToString());   
      }   
         
      } 
      

  3.   


    图象分割有三种不同的途径,其一是将各象素划归到相应物体或区域的象素聚类方法即区域法,其二是通过直接确定区域间的边界来实现分割的边界方法,其三是首先检测边缘象素再将边缘象素连接起来构成边界形成分割。早期的图像分割方法可以分为两大类。一类是边界方法,这种方法假设图像分割结果的某个子区域在原来图像中一定会有边缘存在;一类是区域方法,这种方法假设图像分割结果的某个子区域一定会有相同的性质,而不同区域的像素则没有共同的性质。这两种方法都有优点和缺点,有的学者考虑把两者结合起来进行研究。现在,随着计算机处理能力的提高,很多方法不断涌现,如基于彩色分量分割、纹理图像分割。所使用的数学工具和分析手段也是不断的扩展,从时域信号到频域信号处理,小波变换等等。图像分割主要包括4种技术:并行边界分割技术、串行边界分割技术、并行区域分割技术和串行区域分割技术。下面是分别对每一项做简单的介绍。 
    象分割是图象处理、分析的一项关键技术。在基于非特定目标、非特定环境的应用中(如基于内容的图象查询系统),图象分割的要求是:在没有高层知识约束的情况下将图象分割成有“意义”的区域。每个区域内的元素具有一致的“属性”和较完整的信息,区域和区域之间有较明显的边界和差距。在分割结果中,一个物体对象内部的细节与颜色渐变应被忽略,而且一个物体对象只应被表示为一个或少数几个分割区域。本文所提出的分割算法主要是针对这类应用。 图象分割的方法众多,并且各自有不同的运用范围,并没有一种适合于所有图象的分割算法[1],这个领域的最新发展中,有基于象素聚类的[9],有基于马尔科夫链的[10]。在这些方法中,利用图划分的全局优化法是一类引人注意的算法。这类方法先把图象转化成一个无向图G=(V,E),其中图象中的每个象素是图的顶点,图的边的权重表示象素之间的关系紧密程度。在此基础上确定一个划分准则,然后利用图的划分算法对图象进行分割。这类方法存在两个难点,一个是如何确定划分准则,另一个是如何在这个准则下进行划分。在文章[2] 中,确定了最小相似度约束,并在此约束下利用最大流算法来进行图划分,但是这个方法倾向于将图中的孤立点划分出来。文章[3]对这个问题进行了修正,提出了正规化的划分函数(Normalized cuts),并且在此准则下将 NP 难度的图划分问题转化成一个利用求矩阵特征值得到次优解的问题。因为这种方法保证了全局最优性,因此能得到较好的分割结果。但其缺点是当待分割图象较大时,计算量巨大。 也可以从局部入手进行分割,比较典型的是利用区域生长算法,这类算法比较常用于医学图象的分割。如在[4][5]中均采用了一定的区域生长准则,并通过此准则不断的对有相同属性的区域进行扩张,直到达到稳定。在这方面让人重视的还有分水岭算法[6],这种算法是通过在图象的不同区域同时进行区域生长,并且引入了相互竞争的概念。这类方法往往能找到局部最优的分割,但是很难达到全局最优性。 也有不少方法是将局部和全局相结合,比较典型的如[7]。在这篇文章中,作者先利用区域生长法对图象进行粗分,然后再利用相似性约束对粗分区域进行合并,从而给出最后结果。由于这种混合的方法能充分利用图象的局部和全局信息,因此具有较好的分割效果。本文提出了一种新的图象分割方法,主要运用于基于内容的图象查询系统的彩色图象分割。它利用一种基于边界强度变化的区域生长算法对图象进行粗分,并将结果转化成一个无向图G=(V,E),然后利用[3]中提出的方法在全局最优化约束的条件下进行细分。试验结果表明此方法有效的结合了图象的局部和全局的信息,分割速度快,而且用它分割不同类型的图,都能得到满意的结果。