Skip to content

Commit

Permalink
Update compare image as basic code
Browse files Browse the repository at this point in the history
  • Loading branch information
vallsv committed Jun 26, 2023
1 parent d3bf376 commit 4956aa1
Showing 1 changed file with 3 additions and 125 deletions.
128 changes: 3 additions & 125 deletions examples/compareImages.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,84 +34,10 @@
import silx.io
from silx.gui import qt
import silx.test.utils
from silx.io.url import DataUrl
from silx.gui.plot.CompareImages import CompareImages
from silx.gui.widgets.UrlSelectionTable import UrlSelectionTable

_logger = logging.getLogger(__name__)

import fabio

try:
import PIL
except ImportError:
_logger.debug("Backtrace", exc_info=True)
PIL = None


class CompareImagesSelection(qt.QMainWindow):
def __init__(self, backend):
qt.QMainWindow.__init__(self, parent=None)
self._plot = CompareImages(parent=self, backend=backend)

self._selectionTable = UrlSelectionTable(parent=self)
self._dockWidgetMenu = qt.QDockWidget(parent=self)
self._dockWidgetMenu.layout().setContentsMargins(0, 0, 0, 0)
self._dockWidgetMenu.setFeatures(qt.QDockWidget.DockWidgetMovable)
self._dockWidgetMenu.setWidget(self._selectionTable)
self.addDockWidget(qt.Qt.LeftDockWidgetArea, self._dockWidgetMenu)

self.setCentralWidget(self._plot)

self._selectionTable.sigImageAChanged.connect(self._updateImageA)
self._selectionTable.sigImageBChanged.connect(self._updateImageB)

def setUrls(self, urls):
for url in urls:
self._selectionTable.addUrl(url)

def setFiles(self, files):
urls = list()
for _file in files:
if os.path.isfile(_file):
urls.append(DataUrl(file_path=_file, scheme=None))
urls.sort(key=lambda url: url.path())
window.setUrls(urls)
window._selectionTable.setSelection(url_img_a=urls[0].path(),
url_img_b=urls[1].path())

def clear(self):
self._plot.clear()
self._selectionTable.clear()

def _updateImageA(self, urlpath):
self._updateImage(urlpath, self._plot.setImage1)

def _updateImage(self, urlpath, fctptr):
def getData():
_url = silx.io.url.DataUrl(path=urlpath)
for scheme in ('silx', 'fabio'):
try:
dataImg = silx.io.utils.get_data(
silx.io.url.DataUrl(file_path=_url.file_path(),
data_slice=_url.data_slice(),
data_path=_url.data_path(),
scheme=scheme))
except:
_logger.debug("Error while loading image with %s" % scheme,
exc_info=True)
else:
# TODO: check is an image
return dataImg
return None

data = getData()
if data is not None:
fctptr(data)

def _updateImageB(self, urlpath):
self._updateImage(urlpath, self._plot.setImage2)


def createTestData():
data = numpy.arange(100 * 100)
Expand All @@ -124,52 +50,14 @@ def createTestData():
return data1, data2


def loadImage(filename):
try:
return silx.io.get_data(filename)
except Exception:
_logger.debug("Error while loading image with silx.io", exc_info=True)

try:
return fabio.open(filename).data
except Exception:
_logger.debug("Error while loading image with fabio", exc_info=True)

if PIL is not None:
try:
return numpy.asarray(PIL.Image.open(filename))
except Exception:
_logger.debug("Error while loading image with PIL", exc_info=True)

raise Exception("Impossible to load '%s' with the available image libraries" % filename)


file_description = """
Image data to compare (HDF5 file with path, EDF files, JPEG/PNG image files).
Data from HDF5 files can be accessed using dataset path and slicing as an URL: silx:../my_file.h5?path=/entry/data&slice=10
EDF file frames also can can be accessed using URL: fabio:../my_file.edf?slice=10
Using URL in command like usually have to be quoted: "URL".
"""


def createParser():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument(
'files',
nargs=argparse.ZERO_OR_MORE,
help=file_description)
parser.add_argument(
'--debug',
dest="debug",
action="store_true",
default=False,
help='Set logging system in debug mode')
parser.add_argument(
'--testdata',
dest="testdata",
action="store_true",
default=False,
help='Use synthetic images to test the application')
parser.add_argument(
'--use-opengl-plot',
dest="use_opengl_plot",
Expand All @@ -192,19 +80,9 @@ def createParser():
backend = "mpl"

app = qt.QApplication([])
if options.testdata or len(options.files) == 2:
if options.testdata:
_logger.info("Generate test data")
data1, data2 = createTestData()
else:
data1 = loadImage(options.files[0])
data2 = loadImage(options.files[1])
window = CompareImages(backend=backend)
window.setData(data1, data2)
else:
data = options.files
window = CompareImagesSelection(backend=backend)
window.setFiles(options.files)

data1, data2 = createTestData()
window = CompareImages(backend=backend)
window.setData(data1, data2)
window.setVisible(True)
app.exec()

0 comments on commit 4956aa1

Please sign in to comment.