当前位置:操作系统 > 安卓/Android >>

Android图像处理系统1.4图像的锐化-边缘检测

Android图像处理系统1.4图像的锐化-边缘检测
图像的锐化-边缘检测:(Robert Gradient、Sobel Gradient、Laplace Gradient)
@author:郑海波
相关博客:
1.http://blog.csdn.net/nuptboyzhb/article/details/7925994
2.http://blog.csdn.net/nuptboyzhb/article/details/7926407
1.      Robert Gradient
[图1]

2.      Sobel Gradient
[图2]

3.      Laplace Gradient
[图3]

关键的Java代码

 
[java] 
/*
     * Robert算子梯度
     * 
     */ 
    public Bitmap RobertGradient(Bitmap myBitmap){ 
        // Create new array 
        int width = myBitmap.getWidth(); 
        int height = myBitmap.getHeight(); 
        int[] pix = new int[width * height]; 
        myBitmap.getPixels(pix, 0, width, 0, 0, width, height); 
        Matrix dataR=getDataR(pix, width, height); 
        Matrix dataG=getDataG(pix, width, height); 
        Matrix dataB=getDataB(pix, width, height); 
        //Matrix dataGray=getDataGray(pix, width, height); 
        ///////////////////////////////////////////////////////// 
        dataR=eachRobertGradient(dataR,width,height); 
        dataG=eachRobertGradient(dataG,width,height); 
        dataB=eachRobertGradient(dataB,width,height); 
        /////////////////////////////////////////////////////////////// 
        // Change bitmap to use new array 
        Bitmap bitmap=makeToBitmap(dataR, dataG, dataB, width, height);  
        myBitmap = null; 
        pix = null; 
        return bitmap; 
    } 
    private Matrix eachRobertGradient(Matrix tempM,int width,int height){ 
        int i,j; 
        for(i=0;i<width-1;i++){ 
            for(j=0;j<height-1;j++){ 
                int temp=Math.abs((int)tempM.get(i, j)-(int)tempM.get(i,j+1)) 
                         +Math.abs((int)tempM.get(i+1,j)-(int)tempM.get(i,j+1)); 
                tempM.set(i, j, temp); 
            } 
        } 
        return tempM; 
    } 
    /*
     *Sobel算子锐化 
     */ 
    public Bitmap SobelGradient(Bitmap myBitmap){ 
        // Create new array 
        int width = myBitmap.getWidth(); 
        int height = myBitmap.getHeight(); 
        int[] pix = new int[width * height]; 
        myBitmap.getPixels(pix, 0, width, 0, 0, width, height); 
        Matrix dataR=getDataR(pix, width, height); 
        Matrix dataG=getDataG(pix, width, height); 
        Matrix dataB=getDataB(pix, width, height); 
        Matrix dataGray=getDataGray(pix, width, height); 
        ///////////////////////////////////////////////////////// 
        dataGray=eachSobelGradient(dataGray, width, height); 
        dataR=dataGray.copy(); 
        dataG=dataGray.copy(); 
        dataB=dataGray.copy(); 
        /////////////////////////////////////////////////////////////// 
        // Change bitmap to use new array 
        Bitmap bitmap=makeToBitmap(dataR, dataG, dataB, width, height);  
        myBitmap = null; 
        pix = null; 
        return bitmap; 
    } 
    private Matrix eachSobelGradient(Matrix tempM,int width,int height){ 
        int i,j; 
        Matrix resultMatrix=tempM.copy(); 
        for(i=1;i<width-1;i++){ 
            for(j=1;j<height-1;j++){ 
                int temp1=Math.abs(((int)tempM.get(i+1, j-1)+2*(int)tempM.get(i+1, j)+(int)tempM.get(i+1,j+1)) 
                         -(((int)tempM.get(i-1,j-1)+2*(int)tempM.get(i-1,j)+(int)tempM.get(i-1,j-1)))); 
                int temp2=Math.abs(((int)tempM.get(i-1, j+1)+2*(int)tempM.get(i, j+1)+(int)tempM.get(i+1,j+1)) 
                         -(((int)tempM.get(i-1,j-1)+2*(int)tempM.get(i,j-1)+(int)tempM.get(i+1,j-1)))); 
                int temp=temp1+temp2; 
                resultMatrix.set(i, j, temp); 
            } 
        } 
        return resultMatrix; 
    } 
    /*
     *Laplace 锐化 
     */ 
    public Bitmap LaplaceGradient(Bitmap myBitmap){ 
    &nb

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,