Skip to content
Snippets Groups Projects
Commit 8d69155d authored by Levecque Etienne's avatar Levecque Etienne
Browse files

test: add tests for the Image class

parent 582c7c31
No related merge requests found
test/jpeg_color.jpg

18.7 KiB

test/jpeg_grayscale.jpg

36.7 KiB

File added
File added
File deleted
import unittest
import numpy as np
from PIL import Image as pilimage
from antecedent.image import Image
from antecedent.pipeline import create_pipeline
class TestOpen(unittest.TestCase):
def setUp(self):
self.spatial_color = "spatial_color.tif"
self.jpeg_color = "jpeg_color.jpg"
self.spatial_grayscale = "spatial_grayscale.tif"
self.jpeg_grayscale = "jpeg_grayscale.jpg"
with pilimage.open(self.spatial_color) as img:
self.pil_spatial_color = img
with pilimage.open(self.jpeg_color) as img:
self.pil_jpeg_color = img
with pilimage.open(self.spatial_grayscale) as img:
self.pil_spatial_grayscale = img
with pilimage.open(self.jpeg_grayscale) as img:
self.pil_jpeg_grayscale = img
def test_jpeg_color(self):
img = Image(self.jpeg_color, self.jpeg_color)
standard_shape = (self.pil_jpeg_color.height // 8, self.pil_jpeg_color.width // 8, 3, 8, 8)
self.assertFalse(img.is_grayscale)
self.assertTrue(img.channel == 3)
self.assertTrue(img.block_view.shape == standard_shape)
def test_jpeg_grayscale(self):
img = Image(self.jpeg_grayscale, self.jpeg_grayscale)
standard_shape = (self.pil_jpeg_color.height // 8, self.pil_jpeg_color.width // 8, 1, 8, 8)
self.assertTrue(img.is_grayscale)
self.assertTrue(img.channel == 1)
self.assertTrue(img.block_view.shape == standard_shape)
def test_spatial_color(self):
img = Image(self.spatial_color, self.spatial_color)
standard_shape = (self.pil_spatial_color.height // 8, self.pil_spatial_color.width // 8, 3, 8, 8)
self.assertFalse(img.is_grayscale)
self.assertTrue(img.channel == 3)
self.assertTrue(img.block_view.shape == standard_shape)
def test_spatial_grayscale(self):
img = Image(self.spatial_grayscale, self.spatial_grayscale)
standard_shape = (self.pil_spatial_grayscale.height // 8, self.pil_spatial_grayscale.width // 8, 1, 8, 8)
self.assertTrue(img.is_grayscale)
self.assertTrue(img.channel == 1)
self.assertTrue(img.block_view.shape == standard_shape)
class TestFilterJPEGColor(unittest.TestCase):
def setUp(self):
self.filename = "jpeg_color.jpg"
self.img = Image(self.filename, self.filename)
self.img.set_filter_parameter(True, True)
self.simple_pipeline = create_pipeline('islow', 60, False, True)
self.double_pipeline = create_pipeline(['islow', 'islow'], [75, 60], False, True)
self.triple_pipeline = create_pipeline(['islow', 'islow', 'islow'], [75, 75, 60], False, True)
def test_simple_pipeline(self):
backward_blocks = self.simple_pipeline.backward(self.img.block_view.reshape(-1, self.img.channel, 8, 8))
true_mask = (np.any(backward_blocks <= 0, axis=(1, 2, 3)) |
np.any(backward_blocks >= 255, axis=(1, 2, 3)))
true_mask = true_mask.reshape(self.img.block_view.shape[:2])
self.img.set_pipeline(self.simple_pipeline)
mask = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask, true_mask))
def test_double_pipeline(self):
self.img.set_pipeline(self.simple_pipeline)
mask_simple = self.img.filter_blocks(purge=True)
self.img.set_pipeline(self.double_pipeline)
mask_double = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask_simple, mask_double))
def test_triple_pipeline(self):
backward_blocks = self.simple_pipeline.backward(self.img.block_view.reshape(-1, self.img.channel, 8, 8))
true_mask = (np.any(backward_blocks <= 0, axis=(1, 2, 3)) |
np.any(backward_blocks >= 255, axis=(1, 2, 3)))
backward_blocks = self.triple_pipeline.backward(self.img.block_view.reshape(-1, self.img.channel, 8, 8))
true_mask = true_mask | (np.any(backward_blocks <= 0, axis=(1, 2, 3)) |
np.any(backward_blocks >= 255, axis=(1, 2, 3)))
true_mask = true_mask.reshape(self.img.block_view.shape[:2])
self.img.set_pipeline(self.triple_pipeline)
mask = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask, true_mask))
class TestFilterJPEGGrayscale(unittest.TestCase):
def setUp(self):
self.filename = "jpeg_grayscale.jpg"
self.img = Image(self.filename, self.filename)
self.img.set_filter_parameter(True, True)
self.simple_pipeline = create_pipeline('islow', 60, True, True)
self.double_pipeline = create_pipeline(['islow', 'islow'], [75, 60], True, True)
self.triple_pipeline = create_pipeline(['islow', 'islow', 'islow'], [75, 75, 60], True, True)
def test_simple_pipeline(self):
backward_blocks = self.simple_pipeline.backward(self.img.block_view.reshape(-1, self.img.channel, 8, 8))
true_mask = (np.any(backward_blocks <= 0, axis=(1, 2, 3)) |
np.any(backward_blocks >= 255, axis=(1, 2, 3)))
true_mask = true_mask.reshape(self.img.block_view.shape[:2])
self.img.set_pipeline(self.simple_pipeline)
mask = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask, true_mask))
def test_double_pipeline(self):
self.img.set_pipeline(self.simple_pipeline)
mask_simple = self.img.filter_blocks(purge=True)
self.img.set_pipeline(self.double_pipeline)
mask_double = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask_simple, mask_double))
def test_triple_pipeline(self):
backward_blocks = self.simple_pipeline.backward(self.img.block_view.reshape(-1, self.img.channel, 8, 8))
true_mask = (np.any(backward_blocks <= 0, axis=(1, 2, 3)) |
np.any(backward_blocks >= 255, axis=(1, 2, 3)))
backward_blocks = self.triple_pipeline.backward(self.img.block_view.reshape(-1, self.img.channel, 8, 8))
true_mask = true_mask | (np.any(backward_blocks <= 0, axis=(1, 2, 3)) |
np.any(backward_blocks >= 255, axis=(1, 2, 3)))
true_mask = true_mask.reshape(self.img.block_view.shape[:2])
self.img.set_pipeline(self.triple_pipeline)
mask = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask, true_mask))
class TestFilterSpatialColor(unittest.TestCase):
def setUp(self):
self.filename = "spatial_color.tif"
self.img = Image(self.filename, self.filename)
self.img.set_filter_parameter(True, True)
self.simple_pipeline = create_pipeline('islow', 60, False, False)
self.double_pipeline = create_pipeline(['islow', 'islow'], [75, 60], False, False)
self.triple_pipeline = create_pipeline(['islow', 'islow', 'islow'], [75, 75, 60], False, False)
def test_simple_pipeline(self):
blocks = self.img.block_view.reshape(-1, self.img.channel, 8, 8)
true_mask = (np.any(blocks <= 0, axis=(1, 2, 3)) |
np.any(blocks >= 255, axis=(1, 2, 3)))
true_mask = true_mask.reshape(self.img.block_view.shape[:2])
self.img.set_pipeline(self.simple_pipeline)
mask = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask, true_mask))
def test_double_pipeline(self):
blocks = self.img.block_view.reshape(-1, self.img.channel, 8, 8)
true_mask = (np.any(blocks <= 0, axis=(1, 2, 3)) |
np.any(blocks >= 255, axis=(1, 2, 3)))
backward_blocks = self.double_pipeline.backward(self.img.block_view.reshape(-1, self.img.channel, 8, 8))
true_mask = true_mask | (np.any(backward_blocks <= 0, axis=(1, 2, 3)) |
np.any(backward_blocks >= 255, axis=(1, 2, 3)))
true_mask = true_mask.reshape(self.img.block_view.shape[:2])
self.img.set_pipeline(self.simple_pipeline)
mask = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask, true_mask))
def test_triple_pipeline(self):
self.img.set_pipeline(self.double_pipeline)
mask_simple = self.img.filter_blocks(purge=True)
self.img.set_pipeline(self.triple_pipeline)
mask_double = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask_simple, mask_double))
class TestFilterSpatialGrayscale(unittest.TestCase):
def setUp(self):
self.filename = "spatial_grayscale.tif"
self.img = Image(self.filename, self.filename)
self.img.set_filter_parameter(True, True)
self.simple_pipeline = create_pipeline('islow', 60, True, False)
self.double_pipeline = create_pipeline(['islow', 'islow'], [75, 60], True, False)
self.triple_pipeline = create_pipeline(['islow', 'islow', 'islow'], [75, 75, 60], True, False)
def test_simple_pipeline(self):
blocks = self.img.block_view.reshape(-1, self.img.channel, 8, 8)
true_mask = (np.any(blocks <= 0, axis=(1, 2, 3)) |
np.any(blocks >= 255, axis=(1, 2, 3)))
true_mask = true_mask.reshape(self.img.block_view.shape[:2])
self.img.set_pipeline(self.simple_pipeline)
mask = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask, true_mask))
def test_double_pipeline(self):
blocks = self.img.block_view.reshape(-1, self.img.channel, 8, 8)
true_mask = (np.any(blocks <= 0, axis=(1, 2, 3)) |
np.any(blocks >= 255, axis=(1, 2, 3)))
backward_blocks = self.double_pipeline.backward(self.img.block_view.reshape(-1, self.img.channel, 8, 8))
true_mask = true_mask | (np.any(backward_blocks <= 0, axis=(1, 2, 3)) |
np.any(backward_blocks >= 255, axis=(1, 2, 3)))
true_mask = true_mask.reshape(self.img.block_view.shape[:2])
self.img.set_pipeline(self.double_pipeline)
mask = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask, true_mask))
def test_triple_pipeline(self):
self.img.set_pipeline(self.double_pipeline)
mask_simple = self.img.filter_blocks(purge=True)
self.img.set_pipeline(self.triple_pipeline)
mask_double = self.img.filter_blocks(purge=True)
self.assertTrue(np.allclose(mask_simple, mask_double))
class TestSelectionVarianceJPEGColor(unittest.TestCase):
def setUp(self):
self.filename = "jpeg_color.jpg"
self.img = Image(self.filename, self.filename)
self.simple_pipeline = create_pipeline('islow', 60, False, True)
self.double_pipeline = create_pipeline(['islow', 'islow'], [75, 60], False, True)
self.img.set_selection_parameter("variance", 20)
def test_selection(self):
self.img.set_pipeline(self.simple_pipeline)
self.img.filter_blocks(purge=True)
self.img.select_blocks(purge=True)
class TestSelectionVarianceJPEGGrayscale(unittest.TestCase):
def setUp(self):
self.filename = "jpeg_grayscale.jpg"
self.img = Image(self.filename, self.filename)
self.simple_pipeline = create_pipeline('islow', 60, True, True)
self.double_pipeline = create_pipeline(['islow', 'islow'], [75, 60], True, True)
self.img.set_selection_parameter("variance", 20)
def test_selection(self):
self.img.set_pipeline(self.simple_pipeline)
self.img.filter_blocks(purge=True)
self.img.select_blocks(purge=True)
class TestSelectionVarianceSpatialColor(unittest.TestCase):
def setUp(self):
self.filename = "spatial_color.tif"
self.img = Image(self.filename, self.filename)
self.simple_pipeline = create_pipeline('islow', 60, False, False)
self.double_pipeline = create_pipeline(['islow', 'islow'], [75, 60], False, False)
self.img.set_selection_parameter("variance", 20)
def test_selection(self):
self.img.set_pipeline(self.simple_pipeline)
self.img.filter_blocks(purge=True)
self.img.select_blocks(purge=True)
class TestSelectionVarianceSpatialGrayscale(unittest.TestCase):
def setUp(self):
self.filename = "spatial_grayscale.tif"
self.img = Image(self.filename, self.filename)
self.simple_pipeline = create_pipeline('islow', 60, True, False)
self.double_pipeline = create_pipeline(['islow', 'islow'], [75, 60], True, False)
self.img.set_selection_parameter("variance", 20)
def test_selection(self):
self.img.set_pipeline(self.simple_pipeline)
self.img.filter_blocks(purge=True)
self.img.select_blocks(purge=True)
\ No newline at end of file
...@@ -11,7 +11,7 @@ from antecedent.pipeline import IslowPipeline ...@@ -11,7 +11,7 @@ from antecedent.pipeline import IslowPipeline
class TestIslowPipeline(unittest.TestCase): class TestIslowPipeline(unittest.TestCase):
def setUp(self): def setUp(self):
jpeglib.version.set('6b') jpeglib.version.set('6b')
self.tif_img = np.asarray(Image.open('test.tif')) self.tif_img = np.asarray(Image.open('spatial_color.tif'))
self.tif_img = self.tif_img[:256, :256, :3] self.tif_img = self.tif_img[:256, :256, :3]
self.start_quality = 24 # quantization tables are too coarse below quality = 24 for baseline JPEG self.start_quality = 24 # quantization tables are too coarse below quality = 24 for baseline JPEG
...@@ -42,7 +42,7 @@ class TestIslowPipeline(unittest.TestCase): ...@@ -42,7 +42,7 @@ class TestIslowPipeline(unittest.TestCase):
for quality in range(self.start_quality, self.end_quality): for quality in range(self.start_quality, self.end_quality):
compressed_img = self.compressed_img[quality - self.start_quality] compressed_img = self.compressed_img[quality - self.start_quality]
pipeline = IslowPipeline(quality, False) pipeline = IslowPipeline(quality, False, False)
rgb_blocks = view_as_blocks(np.copy(self.tif_img), (8, 8, 1)).reshape(-1, 3, 8, 8) rgb_blocks = view_as_blocks(np.copy(self.tif_img), (8, 8, 1)).reshape(-1, 3, 8, 8)
compressed_blocks = pipeline.rgb_pxl_to_ycc_dct(rgb_blocks) compressed_blocks = pipeline.rgb_pxl_to_ycc_dct(rgb_blocks)
...@@ -52,7 +52,7 @@ class TestIslowPipeline(unittest.TestCase): ...@@ -52,7 +52,7 @@ class TestIslowPipeline(unittest.TestCase):
for quality in range(self.start_quality, self.end_quality): for quality in range(self.start_quality, self.end_quality):
decompressed_img = self.decompressed_img[quality - self.start_quality] decompressed_img = self.decompressed_img[quality - self.start_quality]
pipeline = IslowPipeline(quality, False) pipeline = IslowPipeline(quality, False, False)
dct_blocks = self.compressed_img[quality - self.start_quality] dct_blocks = self.compressed_img[quality - self.start_quality]
decompressed_blocks = pipeline.ycc_dct_to_rgb_pxl(dct_blocks) decompressed_blocks = pipeline.ycc_dct_to_rgb_pxl(dct_blocks)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment