Package hipi.unittest

Source Code of hipi.unittest.JPEGImageUtilTestCase

/**
*
*/
package hipi.unittest;

import static org.junit.Assert.*;
import static org.junit.Assume.*;
import hipi.image.FloatImage;
import hipi.image.ImageHeader;
import hipi.image.io.ImageDecoder;
import hipi.image.io.ImageEncoder;
import hipi.image.io.JPEGImageUtil;
import hipi.image.io.PPMImageUtil;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

import org.junit.Test;

/**
* @author liu
*
*/
public class JPEGImageUtilTestCase {

  /**
   * Test method for {@link hipi.image.io.JPEGImageUtil#decodeImageHeader(java.io.InputStream)}.
   * @throws IOException
   */
  @Test
  public void testDecodeImageHeader() throws IOException {
    ImageDecoder decoder = JPEGImageUtil.getInstance();
    FileInputStream fis;
    ImageHeader header;
    String[] fileName = {"canon-ixus", "fujifilm-dx10", "fujifilm-finepix40i", "fujifilm-mx1700", "kodak-dc210", "kodak-dc240", "nikon-e950", "olympus-c960", "ricoh-rdc5300", "sanyo-vpcg250", "sanyo-vpcsx550", "sony-cybershot", "sony-d700"};
    String[] model = {"Canon DIGITAL IXUS", "DX-10", "FinePix40i", "MX-1700ZOOM", "DC210 Zoom (V05.00)", "KODAK DC240 ZOOM DIGITAL CAMERA", "E950", "C960Z,D460Z", "RDC-5300", "SR6", "SX113", "CYBERSHOT", "DSC-D700"};
    int[] width = {640, 1024, 600, 640, 640, 640, 800, 640, 896, 640, 640, 640, 672};
    int[] height = {480, 768, 450, 480, 480, 480, 600, 480, 600, 480, 480, 480, 512};
    int[] bit_depth = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};
    for (int i = 0; i < fileName.length; i++)
    {
      fis = new FileInputStream("data/test/JPEGImageUtilTestCase/exif/" + fileName[i] + ".jpg");
      header = decoder.decodeImageHeader(fis);
      assertEquals("exif model not correct", model[i].trim(), header.getEXIFInformation("Model").trim());
      assertEquals("width not correct", width[i], header.width);
      assertEquals("height not correct", height[i], header.height);
      assertEquals("bit depth not correct", bit_depth[i], header.bitDepth);
    }
  }

  /**
   * Test method for {@link hipi.image.io.JPEGImageUtil#decodeImage(java.io.InputStream)}.
   * @throws IOException
   */
  @Test
  public void testDecodeImage() throws IOException {
    ImageDecoder jpgDecoder, ppmDecoder;
    jpgDecoder = JPEGImageUtil.getInstance();
    ppmDecoder = PPMImageUtil.getInstance();
    FileInputStream fis;
    FloatImage ppmImage, jpgImage;
    String[] fileName = {"canon-ixus", "cmyk-jpeg-format"};
    for (int i = 0; i < fileName.length; i++)
    {
      fis = new FileInputStream("data/test/JPEGImageUtilTestCase/truth/" + fileName[i] + ".ppm");
      ppmImage = ppmDecoder.decodeImage(fis);
      assumeNotNull(ppmImage);
      fis = new FileInputStream("data/test/JPEGImageUtilTestCase/decode/" + fileName[i] + ".jpg");
      jpgImage = jpgDecoder.decodeImage(fis);
      assumeNotNull(jpgImage);
      assertEquals(fileName[i] + " decoding fails", ppmImage, jpgImage);
    }
  }

  /**
   * Test method for {@link hipi.image.io.JPEGImageUtil#encodeImage(hipi.image.FloatImage, hipi.image.ImageHeader, java.io.OutputStream)}.
   * @throws IOException
   */
  @Test
  public void testEncodeImage() throws IOException {
    ImageDecoder decoder = PPMImageUtil.getInstance();
    ImageEncoder encoder = JPEGImageUtil.getInstance();
    FileInputStream pis;
    FileOutputStream jos;
    FloatImage image;
    String[] fileName = {"canon-ixus", "cmyk-jpeg-format"};
    for (int i = 0; i < fileName.length; i++)
    {
      pis = new FileInputStream("data/test/JPEGImageUtilTestCase/truth/" + fileName[i] + ".ppm");
      image = decoder.decodeImage(pis);
      jos = new FileOutputStream("/tmp/" + fileName[i] + ".jpg");
      encoder.encodeImage(image, null, jos);
      Runtime rt = Runtime.getRuntime();
      Process pr = rt.exec("compare -metric PSNR data/test/JPEGImageUtilTestCase/truth/" + fileName[i] + ".ppm /tmp/" + fileName[i] + ".jpg /tmp/psnr.png");
      Scanner scanner = new Scanner(new InputStreamReader(pr.getErrorStream()));
      float psnr = scanner.hasNextFloat() ? scanner.nextFloat() : 0;
      assertTrue(fileName[i] + " PSNR is too low : " + psnr, psnr > 30);
    }
  }

}
TOP

Related Classes of hipi.unittest.JPEGImageUtilTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.