메뉴 건너뛰기

영상처리

영상처리 스터디 과제(5월 20일)

유원종 2016.05.28 01:08 조회 수 : 68


import java.util.ArrayList;

import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;

public class myFunction {
    public static int[] getHistogram(Mat source)
    {
        int[] tmp = new int[256];
        double[] datas = new double[3];
        for(int i = 0;i < source.rows(); i++)
        {
            for(int k = 0; k < source.cols(); k++)
            {
                /*/Random random = new Random();
                datas[0] = random.nextInt(255);
                datas[1] = random.nextInt(255);
                datas[2] = random.nextInt(255);
                source.put(i, k, datas);*/
                datas = source.get(i, k);
                //sSystem.out.println(datas[0]);
                tmp[(int)datas[0]]++;
                //System.out.println(tmp[(int)datas[0]]);
                //histogram.put(tmp[(int)datas[0]],(int)datas[0], 158);
            }
        }
        return tmp;
    }
    
    public static Mat threshold(Mat source, int threshold)
    {
        Mat target = source.clone();
        
        Imgproc.cvtColor(source, target, Imgproc.COLOR_RGB2GRAY);
        
        //Imgproc.Canny(image, image, 50, 200);
        
        //Imgproc.threshold(target, target, threshold, 255, Imgproc.THRESH_BINARY);
        
        for(int h = 0; h < target.rows(); h++)
        {
            for(int w = 0; w < target.cols(); w++)
            {
                double a[] = target.get(h, w);
                if(a[0] <= threshold)
                {
                    a[0] = 0;
                    target.put(h, w, a);
                }
                else
                {
                    a[0] = 255;
                    target.put(h, w, a);
                }
            }
        }
        
        return target;
    }
    
    public static Mat Gamma(Mat source, double value)
    {
        Mat target = source.clone();
        double gammaCorrection = 1 / value;
        
        for(int h = 0; h < target.rows(); h++)
        {
            for(int w = 0; w < target.cols(); w++)
            {
                double a[] = target.get(h, w);
                for(int i = 0;  i < 3; i++)
                {
                    a[i] = Math.pow(a[i] / 255.0, gammaCorrection) * 255.0;
                }
                
                target.put(h, w, a);
            }
        }
        return target;
        
    }
    
    public static Mat Mask(Mat source, double mask[][], int mask_width, int mask_height)
    {
        Mat target = source.clone();
        System.out.println(mask_height / 2);
        System.out.println(target.cols() - (mask_width / 2) - 2);
        
        double maskSum = 0.0;
        
        for(int h = 0; h < mask_height; h++)
        {
            for(int w = 0; w < mask_width; h++)
            {
                maskSum += mask[h][w];
            }
        }
        
        for(int h = mask_height / 2; h < target.rows() - (mask_height / 2) - 1; h++)
        {
            for(int w = mask_width / 2; w < target.cols() - (mask_width / 2) - 1; w++)
            {
                ArrayList<double[]> array = new ArrayList<double[]>();
                array.add(target.get(h - 1, w - 1));
                array.add(target.get(h - 1, w));
                array.add(target.get(h - 1, w + 1));
                array.add(target.get(h, w - 1));
                array.add(target.get(h, w));
                array.add(target.get(h, w + 1));
                array.add(target.get(h + 1, w - 1));
                array.add(target.get(h + 1, w));
                array.add(target.get(h + 1, w + 1));
                double[] tmp = new double[3];
                for(int i = 0; i < 3; i++)
                {
                    double sum = 0.0;
                    for(int q = 0; q < mask_height; q++)
                    {
                        for(int k = 0; k < mask_width; k++)
                        {
                            sum += array.get((3 * q) + k)[i] * mask[q][k];
                        }
                        
                    }
                    if(maskSum != 0.0) tmp[i] = sum / maskSum;
                }
                target.put(h, w, tmp);
            }
        }
        return target;
    }
}

위로