Commit dd08a3f5 authored by rhaase's avatar rhaase

removed registration script. It is no longer needed

parent 172e3c5c
# This script allows 2D-registration of slices in a stack according to average coordinates of 2D objects in the slices
# What it needs:
# * an image stack, it may have several channels
# * the slices should be oriented in Z
# * the surface manager should have stored the outlines of the objects, because this script runs only with the resultstable of the surface managers statistics function
# * all surfaces MUST have the same starting and ending slice. Ideally, they are starting and endling slice of the stack
#
# Version 1.0.0, December 8th, 2015
# Author Robert Haase, Scientific Computing Facility, MPI CBG, rhaase@mpi-cbg.de
#
# Copyright 2018 Max Planck Institute of Molecular Cell Biology and Genetics,
# Dresden, Germany
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
from ij import IJ, ImagePlus, ImageStack, CompositeImage
from ij.measure import ResultsTable
from mpicbg_scicomp.imgTools.gui import SurfaceManager
from mpicbg.models import Point
from mpicbg.models import RigidModel2D
from java.util import ArrayList
from mpicbg_scicomp.imgTools.SandBox import RigidPointListRegistrationDeterminer
from mpicbg_scicomp.imgTools.SandBox import RigidRegistrationApplyer
from ij.plugin import HyperStackConverter
# Initialisation
imp = IJ.getImage()
suMa = SurfaceManager.getInstance()
rt = suMa.getSliceBySliceResultsTable()
# read interesting columns from resultsTable
timePositions = rt.getColumn(rt.getColumnIndex("time"))
xPositions = rt.getColumn(rt.getColumnIndex("avg_x"))
yPositions = rt.getColumn(rt.getColumnIndex("avg_y"))
#create memory for resulting image stack and accumulated rigid transformation
resultStack = ImageStack(imp.width, imp.height)
collectedTransformation = None
# go through all slices
for z in range(1, imp.getNSlices() + 1):
imp.setZ(z)
# determine positions of objects
points = ArrayList()
for i in range(0, len(timePositions)):
# read out current average X/Y coordinates
if (z == timePositions[i]):
points.add(Point([xPositions[i], yPositions[i]]))
# transform all slices but the first one
if (z > 1):
rigidReg = RigidPointListRegistrationDeterminer(points, formerPoints, RigidModel2D())
transformation = rigidReg.getTransformation();
# accumulate transformation from slice to slice. At the end, every slice is in fact registered to the first one
if (collectedTransformation is None):
collectedTransformation = transformation
else:
transformation.preConcatenate(collectedTransformation)
collectedTransformation = transformation
#apply transformation to all channels
for c in range(1, imp.getNChannels() + 1):
imp.setC(c)
transformationApplyer = RigidRegistrationApplyer(imp.getProcessor(), collectedTransformation, True)
ip = transformationApplyer.getTransformedImage()
resultStack.addSlice(None, ip)
else:
# just copy all slices
for c in range(1, imp.getNChannels() + 1):
imp.setC(c)
ip = imp.getProcessor()
resultStack.addSlice(None, ip)
formerPoints = points
#reformat the image.
resultImp = ImagePlus("Registered: " + imp.getTitle(), resultStack)
hypImp = HyperStackConverter.toHyperStack(resultImp, imp.getNChannels(), imp.getNSlices(), 1, "default", "Color")
hypImp.setLuts(imp.getLuts())
hypImp.show()
print ("Bye.")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment