Files
guilan-multimedia-lab/backend/processing/tests/test_algorithms.py

61 lines
2.1 KiB
Python

import numpy as np
from django.test import SimpleTestCase
from processing.algorithms import (
LAPLACIAN_MASK,
ProcessingError,
average_images,
gamma,
histogram_equalization,
median_filter,
negative,
roberts,
sobel,
subtract_images,
verify_registration,
)
class AlgorithmTests(SimpleTestCase):
def test_negative_transform_uses_l_minus_one(self):
image = np.array([[[0, 127, 255]]], dtype=np.uint8)
result = negative(image, {})
np.testing.assert_array_equal(result, np.array([[[255, 128, 0]]], dtype=np.uint8))
def test_gamma_identity(self):
image = np.array([[[0, 128, 255]]], dtype=np.uint8)
result = gamma(image, {"gamma": 1, "c": 1})
np.testing.assert_array_equal(result, image)
def test_laplacian_mask_sums_to_zero(self):
self.assertEqual(int(LAPLACIAN_MASK.sum()), 0)
def test_histogram_equalization_spreads_two_levels(self):
image = np.array([[0, 0], [255, 255]], dtype=np.uint8)
result = histogram_equalization(image, {})
np.testing.assert_array_equal(result, image)
def test_median_removes_impulse_noise(self):
image = np.full((3, 3, 3), 100, dtype=np.uint8)
image[1, 1] = 255
result = median_filter(image, {"size": 3})
self.assertEqual(int(result[1, 1, 0]), 100)
def test_gradient_outputs_are_display_normalized(self):
image = np.zeros((5, 5, 3), dtype=np.uint8)
image[:, 3:] = 255
self.assertEqual(sobel(image, {}).dtype, np.uint8)
self.assertEqual(roberts(image, {}).dtype, np.uint8)
def test_arithmetic_requires_registered_shapes(self):
left = np.zeros((2, 2, 3), dtype=np.uint8)
right = np.zeros((3, 2, 3), dtype=np.uint8)
with self.assertRaises(ProcessingError):
verify_registration([left, right])
def test_average_and_subtraction(self):
left = np.zeros((2, 2, 3), dtype=np.uint8)
right = np.full((2, 2, 3), 100, dtype=np.uint8)
self.assertEqual(int(average_images([left, right])[0, 0, 0]), 50)
self.assertEqual(int(subtract_images(left, right)[0, 0, 0]), 0)