초보자를 위한 이미지 Blurring 기술 - 2

2023. 4. 6. 19:24프로그래밍

728x90

 

 

초보자를 위한 이미지 Blurring 기술 - 2

초보자를 위한 Blurring 기술 그럼 저번 문서1에서의 내용을 바탕으로 이미지관련 내용을 만들어 보기로 ...

blog.naver.com

 

그럼 저번 문서1에서의 내용을 바탕으로 이미지관련 내용을 만들어 보기로 하자.

우선 인터페이스 Blurring을 하나 다음과 같이 만들었다.

interface Blurring
{
	void doBlur();
	boolean makeImageBlurred();
}
 

doBlur 에서 모든 것을 처리해도 되나..그냥 이미지를 만드는 부분은 따로 떼어내서 하나를 만들고 이미지가 제대로 만들어 지면 이미지를 원하는 곳에 만들고 상태를 성공/실패 여부를 확인 하는 메서드인 makeImageBlurred를 만들었다.

static class Blur1Test implements Blurring
{
    private static final String Blur1_src_path = "resources/flower_src.jpg";
    private static final String Blur1_desc_path = "resources/flower_dest.jpg";
    private static final String Blur1_path = "resources/flower_blur1.jpg";
    private static final String formatName = "jpg";

    BufferedImage Blur1_src;
    BufferedImage Blur1_dest;
    BufferedImage Blur1_img;
            

    Blur1Test()
    {
       try {
           Blur1_src = ImageIO.read(new File(Blur1_src_path));
           Blur1_dest = ImageIO.read(new File(Blur1_desc_path));
        } catch (IOException e) {
          e.printStackTrace();
        }
    }

           
    @Override
    public void doBlur() {
       float[] matrix = new float[400];

       for (int i = 0; i < 400; i++)
           matrix[i] = 1.0f/400.0f;
		   
		BufferedImageOp op= new ConvolveOp(new Kernel(20, 20, matrix), ConvolveOp.EDGE_NO_OP, null);
        Blur1_img = op.filter(Blur1_src, Blur1_dest);
	}
 

    @Override
    public boolean makeImageBlurred() {
		boolean success = false;

		try {
			success = ImageIO.write(Blur1_img, formatName, new File(Blur1_path));
		} catch (IOException e) {
			e.printStackTrace();
		}

		return success;
	}
}
 

 

앞으로 위의 클래스나 인터페이스가 많이 바뀌겠지만,

내 생각에는 앞으로 이 흐림 효과를 만드는 여러가지 테스트 클래스를 만들어 갈때

우선, 각 클래스마다 각각의 흐림효과 테스트가 되어야 한다고 생각 했으며, 이렇게 각각의 독립적인 흐림효과 클래스를 만들기위해서는 각 클래스에서 불러오는 이미지 이름들이나, 변수들은 각 클래스내의 변수로 존재 해야 한다고 생각 하였다.

 

그리고 github에 테스트 한 클래스를 올려 놓았다.

BlurTest.java2 파일에서 신경 쓸 부분은 다음 선언 문이며, 각 흐림 효과마다 아이디를 부여하고 이를 SELECTED_TEST 변수에 옮겨 놓으면 되도록 하였다.

나머지 메인 함수가 있는 곳은 PPMProcessing.java3 인데,

ppm 이미지를 이용해서 이 효과들을 구현 할 수 있도록 만들어 보았다. 앞으로 진행 하면서 이를 살펴보기로 한다. 사실 가우시안 blur를 찾아가 시작되었는 데, 튜토리얼이 좋으니깐 할 수 있는 한 까지 이 흐름 효과에 대해서 작성 하도록 해보자...

 

대신 모든 알고리즘은 

https://github.com/axet/jhlabs에서 얻어 왔다.

 

private static final int NORMAL_BLUR = 1;
private static final int BIG_BLUR = 2;
private static final int CONVOLV_BLUR = 3;
private static final int BOX_BLUR = 4;
private static final int GAUSSIAN_BLUR = 5;
private static final int MOTION_BLUR = 6;
private static final int MOTION_BLUR_OP = 7;
private static final int LENS_BLUR = 8;
private static final int SMART_BLUR = 9;
private static final int VARIABLE_BLUR = 10;
private static final int UNSHARP = 11;
private static final int GLOW = 12;
private static final int SHADOW = 13;
private static final int RAYS = 14;
private static final int SELECTED_TEST = BOX_BLUR;
 

이상.


 

 

728x90