add icp registration however only 2d transformation matrix is supported yet

This commit is contained in:
2021-07-22 16:11:52 +02:00
parent 02ae4f1784
commit 1de42f1e5d
2 changed files with 19 additions and 1 deletions

View File

@@ -1,4 +1,4 @@
from .registration import Registration, RegistrationFunction, FilterregRegistrationFunction
from .registration import Registration, RegistrationFunction, IcpRegistrationFunction, FilterregRegistrationFunction
from .channel_registration import SituImageChannelRegistration, ChannelRegistration, AcrossRoundChannelRegistration
from .round_registration import RoundRegistration, AllChannelRoundRegistration
from .tile_registration import CombinedRegistration

View File

@@ -54,6 +54,24 @@ class FilterregRegistrationFunction(RegistrationFunction):
scale=tf_param.scale, offset=tf_param.t[0:2])
class IcpRegistrationFunction(RegistrationFunction):
def __init__(self, max_correspondence_distance=50) -> None:
self.max_distance = max_correspondence_distance
def do_registration(self,
data_peaks: np.ndarray,
reference_peaks: np.ndarray) -> ScaleRotateTranslateTransform:
source = o3.geometry.PointCloud()
source.points = o3.utility.Vector3dVector(extend_dim(data_peaks))
target = o3.geometry.PointCloud()
target.points = o3.utility.Vector3dVector(extend_dim(reference_peaks))
reg_p2p = o3.pipelines.registration.registration_icp(
source, target, 200)
print('Transformation: ')
print(reg_p2p.transformation)
return ScaleRotateTranslateTransform(reg_p2p.transformation[0:2, 0:2])
class Registration:
__metaclass__ = abc.ABCMeta