summaryrefslogtreecommitdiff
path: root/silx/opencl/test/test_medfilt.py
diff options
context:
space:
mode:
Diffstat (limited to 'silx/opencl/test/test_medfilt.py')
-rw-r--r--silx/opencl/test/test_medfilt.py175
1 files changed, 0 insertions, 175 deletions
diff --git a/silx/opencl/test/test_medfilt.py b/silx/opencl/test/test_medfilt.py
deleted file mode 100644
index 976b199..0000000
--- a/silx/opencl/test/test_medfilt.py
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# Project: Median filter of images + OpenCL
-# https://github.com/silx-kit/silx
-#
-# Permission is hereby granted, free of charge, to any person
-# obtaining a copy of this software and associated documentation
-# files (the "Software"), to deal in the Software without
-# restriction, including without limitation the rights to use,
-# copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following
-# conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-# OTHER DEALINGS IN THE SOFTWARE.
-
-"""
-Simple test of the median filter
-"""
-
-from __future__ import division, print_function
-
-__authors__ = ["Jérôme Kieffer"]
-__contact__ = "jerome.kieffer@esrf.eu"
-__license__ = "MIT"
-__copyright__ = "2013-2017 European Synchrotron Radiation Facility, Grenoble, France"
-__date__ = "05/07/2018"
-
-
-import sys
-import time
-import logging
-import numpy
-import unittest
-from collections import namedtuple
-try:
- import mako
-except ImportError:
- mako = None
-from ..common import ocl
-if ocl:
- import pyopencl
- import pyopencl.array
- from .. import medfilt
-
-logger = logging.getLogger(__name__)
-
-Result = namedtuple("Result", ["size", "error", "sp_time", "oc_time"])
-
-try:
- from scipy.misc import ascent
-except:
- def ascent():
- """Dummy image from random data"""
- return numpy.random.random((512, 512))
-try:
- from scipy.ndimage import filters
- median_filter = filters.median_filter
- HAS_SCIPY = True
-except:
- HAS_SCIPY = False
- from silx.math import medfilt2d as median_filter
-
-@unittest.skipUnless(ocl and mako, "PyOpenCl is missing")
-class TestMedianFilter(unittest.TestCase):
-
- def setUp(self):
- if ocl is None:
- return
- self.data = ascent().astype(numpy.float32)
- self.medianfilter = medfilt.MedianFilter2D(self.data.shape, devicetype="gpu")
-
- def tearDown(self):
- self.data = None
- self.medianfilter = None
-
- def measure(self, size):
- "Common measurement of accuracy and timings"
- t0 = time.time()
- if HAS_SCIPY:
- ref = median_filter(self.data, size, mode="nearest")
- else:
- ref = median_filter(self.data, size)
- t1 = time.time()
- try:
- got = self.medianfilter.medfilt2d(self.data, size)
- except RuntimeError as msg:
- logger.error(msg)
- return
- t2 = time.time()
- delta = abs(got - ref).max()
- return Result(size, delta, t1 - t0, t2 - t1)
-
- @unittest.skipUnless(ocl and mako, "pyopencl is missing")
- def test_medfilt(self):
- """
- tests the median filter kernel
- """
- r = self.measure(size=11)
- if r is None:
- logger.info("test_medfilt: size: %s: skipped")
- else:
- logger.info("test_medfilt: size: %s error %s, t_ref: %.3fs, t_ocl: %.3fs" % r)
- self.assertEqual(r.error, 0, 'Results are correct')
-
- def benchmark(self, limit=36):
- "Run some benchmarking"
- try:
- import PyQt5
- from ...gui.matplotlib import pylab
- from ...gui.utils import update_fig
- except:
- pylab = None
-
- def update_fig(*ag, **kwarg):
- pass
-
- fig = pylab.figure()
- fig.suptitle("Median filter of an image 512x512")
- sp = fig.add_subplot(1, 1, 1)
- sp.set_title(self.medianfilter.ctx.devices[0].name)
- sp.set_xlabel("Window width & height")
- sp.set_ylabel("Execution time (s)")
- sp.set_xlim(2, limit + 1)
- sp.set_ylim(0, 4)
- data_size = []
- data_scipy = []
- data_opencl = []
- plot_sp = sp.plot(data_size, data_scipy, "-or", label="scipy")[0]
- plot_opencl = sp.plot(data_size, data_opencl, "-ob", label="opencl")[0]
- sp.legend(loc=2)
- fig.show()
- update_fig(fig)
- for s in range(3, limit, 2):
- r = self.measure(s)
- print(r)
- if r.error == 0:
- data_size.append(s)
- data_scipy.append(r.sp_time)
- data_opencl.append(r.oc_time)
- plot_sp.set_data(data_size, data_scipy)
- plot_opencl.set_data(data_size, data_opencl)
- update_fig(fig)
- fig.show()
- if sys.version_info[0] < 3:
- raw_input()
- else:
- input()
-
-
-def suite():
- testSuite = unittest.TestSuite()
- testSuite.addTest(TestMedianFilter("test_medfilt"))
- return testSuite
-
-
-def benchmark():
- testSuite = unittest.TestSuite()
- testSuite.addTest(TestMedianFilter("benchmark"))
- return testSuite
-
-
-if __name__ == '__main__':
- unittest.main(defaultTest="suite")