python中简单的2D图像注册

imgreg2D的Python项目详细描述


图像2D

简单的基于napari的python应用程序,用于将2D图像注册到模板。在

安装

您可以使用以下方法直接从Pypi安装代码:

pip install imgreg2d

或者,您可以直接从github repository安装:

^{pr2}$

使用

要将图像注册到模板,用户需要指定一组点(大于3,理想情况下至少6个)的位置 参考和注册图像。这些数据然后被用来计算仿射矩阵,然后用来 扭曲注册图像,使其与模板匹配。在

有关如何执行OM图像注册的示例,请选中example.py或阅读以下内容:

第0步-导入函数并获取图像

from imgreg2D.register import register
from imgreg2D.points import get_fixed_points

reference = 'media/original.jpg' # <- path to reference image
registering = 'media/rotated.jpg' # <- path to registering image

当我们调用register时,我们必须传递引用并注册图像。 这可以通过像上面的代码一样传递文件路径或者通过传递np.ndarray来完成。在

步骤1-定义参考图像上的点

要定义用于在参考图像(fixed_points)上注册的点的位置,可以使用 get_fixed_points。如果您已经知道这些点的位置(例如,因为您已经使用了相同的点 模板图像),您可以跳过此步骤。在

points = get_fixed_points(reference)

单击所有需要的点后,按q关闭查看器并继续下一步。在

步骤2-定义注册图像的点

现在,您必须单击注册图像中相应的一组点,以便 可以计算仿射变换。记住,点的定义顺序很重要:第一个点 在步骤1中单击的内容必须与现在要定义的第一个点相对应。因为这个原因,给你看了一份副本 你的参考图像的位置和顺序的固定点。一旦你定义了所有的注册点 编辑器将自动关闭,分析将继续进行下一步。在

要开始定义注册点,请调用:

register(reference, registering, fixed_points = points)

注意:如果您已经有一个转换矩阵(例如,从上一次运行的注册步骤),您可以跳过这一步。 要跳过步骤2,只需致电:

warped_img, warp_mtx = register(reference, registering, warp_mtx = warp_mtx)

注2:调用register时,您可以决定是否要保存扭曲矩阵。这可以用来节省时间 下次需要注册图像时。在

步骤3-交互式优化

一旦定义了注册点的位置,代码将计算仿射变换(warp_mtx)和 注册您的图像。 此时,另一个napari查看器将打开,您可以使用该查看器使用 以下热键:

############################################################
##                REFINEMENT HOT KEYS                     ##
##                                                        ##
##    TRANSLATIONS                                        ##
##   ------------------------------------------------     ##
##      'a' -> negative x translation                     ##
##      'w' -> positive y translation                     ##
##                                                        ##
##      's' -> negative y translation                     ##
##      'd' -> positive x translation                     ##
##                                                        ##
##    SCALING                                            ##
##   ------------------------------------------------     ##
##      'r' -> positive x scaling                         ##
##      'f' -> negative x scaling                         ##
##                                                        ##
##      't' -> positive y scaling                         ##
##      'g' -> negative y scaling                         ##
##                                                        ##
##    SHEARS                                              ##
##   ------------------------------------------------     ##
##      'z' -> positive x shear                           ##
##      'x' -> negative x shear                           ##
##                                                        ##
##      'c' -> positive y shear                           ##
##      'v' -> negative y shear                           ##
##                                                        ##
############################################################

一旦您对结果满意,请按y完成分析(如果您不满意, 按n,您可以从步骤2)再试一次。 在第三步之后,您将得到您注册的图像(warped_img)和仿射变换矩阵(warp_mtx),享受吧!在

信用与贡献

原始代码是Common-Coordinates-Behaviour的一部分(作者:philipshamash)。该代码经过修改,可以与Napari一起使用。在

欢迎投稿!只需发送一个公关或打开一个问题。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java随机填充2d数组   java运行时。getRuntime。带有长参数的exec(cmd)   java Minecraft无法放置自定义背景   java AChartEngine YAxis自定义标签区域边距和图表值为字符串?   泛型类的java类型安全错误   整数的java符号等价物。toBinaryString方法?   Java中数组列表的数组   java WebView应用程序在谷歌登录后显示空白屏幕   java从backback中删除特定片段   如果服务器不支持使用的协议,java JSSE是否实现回退?   java Sonarqube正在进行核心漏洞查找。如何解决   javajavax。jcr。UnsupportedPositionOperationException:testVersionable处的节点不可版本化   java在安卓中每隔X小时运行一次文件/函数,无需打开应用程序   java如何为磁盘持久性配置BigMemory?   java BufferWriter不转换383以上的整数   Java7交集类型:规范具体说明了什么?   Java:CollectionHow创建多列   java如何检测运算符的空白   java问题:在firebase中为导航栏中的第二个表单提交数据第一个表单工作正常。实际isse是连接Mainactivity中的另一个活动