OpenCV中LU分解实现矩阵求逆invert(DECOMP_LU)-定点化

2023-11-15

基于LU分解的矩阵求逆定点化版本,由于需要频繁移位,因此定点比浮点还耗时

浮点版本参考上一篇博客:http://blog.csdn.net/xidianzhimeng/article/details/51284206

话不过多,直接上代码,有不明白的地方留言


typedef char                S8;
typedef short               S16;
typedef int                 S32;


typedef unsigned char       U8;
typedef unsigned short      U16;
typedef unsigned int        U32;


typedef int                 CPLX16;
typedef float               F32;


typedef long long           S64;
typedef unsigned long long  U64;


typedef long long           S40;
typedef unsigned long       U40;


typedef int                 BOOL;



#define INVERT_EXPAND1      10
#define INVERT_EXPAND1_N    (1<<INVERT_EXPAND1)
#define INVERT_EXPAND2      20
#define INVERT_EXPAND2_N    (1<<INVERT_EXPAND2)
#define INVERT_EXPAND3      30
#define INVERT_EXPAND3_N    (1<<INVERT_EXPAND3)
#define INVERT_EXPAND4      40


#define MAX_SD_ROW          200
#define MAX_SD_COL          200

S64 matrixT[MAX_SD_ROW][MAX_SD_COL];
S64 matrixB[MAX_SD_ROW][MAX_SD_COL];


// A(symmetry) : diagonal element is 18+8=26bit , other element is 18bit
BOOL MatrixInvLUFixed(S32 A[MAX_SD_ROW][MAX_SD_COL], const U32 n)
{
    S32 ii;
    U32 i, j, k;
    F32 d;
    S64 dd, s, alpha;


    for (i = 0; i < n; i++)
    {

        // 由于已知输入为对称矩阵并且对角线上元素最大,所以省去选择主元
        if (_abs(matrixT[i][i] >> 32) == 0 && _abs(matrixT[i][i] & 0xffffffff) == 0)
            return FALSE;

        d = _rcpsp((F32)matrixT[i][i]);
        dd = (S64)(d * INVERT_EXPAND3_N);

        for (j = i + 1; j < n; j++)
        {
            alpha = matrixT[j][i] * dd;
            for (k = i + 1; k < n; k++)
            {
                matrixT[j][k] = matrixT[j][k] - (alpha*matrixT[i][k] >> INVERT_EXPAND3);
                matrixB[j][k] = matrixB[j][k] - (alpha*matrixB[i][k] >> INVERT_EXPAND3);
            }
            for (k = 0; k <= i; k++)
                matrixB[j][k] = matrixB[j][k] - (alpha*matrixB[i][k] >> INVERT_EXPAND3);
        }


        matrixT[i][i] = dd;
    }


    // A occupy 10bit
    for (ii = n - 1; ii >= 0; ii--)
        for (j = 0; j < n; j++)
        {
            s = matrixB[ii][j] << INVERT_EXPAND3;
            for (k = ii + 1; k < n; k++)
                s -= (matrixT[ii][k] * matrixB[k][j]);
            matrixB[ii][j] = (s >> INVERT_EXPAND3) * matrixT[ii][ii];
            A[ii][j] = (S32)(matrixB[ii][j] >> INVERT_EXPAND2);
        }


    return TRUE;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV中LU分解实现矩阵求逆invert(DECOMP_LU)-定点化 的相关文章

  • 如何将多行文本插入到框架/图像中

    我使用 C 和 OpenCV 创建了一个框架 并想在其中插入几行文本 使用以下代码 putText frame My text here cvPoint 30 30 FONT HERSHEY COMPLEX SMALL 0 8 cvScal
  • 深度估计的准确性 - 立体视觉

    我正在研究立体视觉 我对这个问题的深度估计的准确性感兴趣 这取决于几个因素 例如 适当的立体校准 旋转 平移和失真提取 图像分辨率 相机和镜头质量 失真越小 色彩捕捉正确 两个图像之间的匹配特征 假设我们没有低成本的相机和镜头 没有廉价的网
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • 未加载库:@rpath/libopenblasp-r0.2.19.dylib

    我应该如何解决这个问题 Monas MacBook Pro 02 02 mona python Python 3 6 1 Anaconda custom x86 64 default May 11 2017 13 04 09 GCC 4 2
  • 使用 OpenCV 进行图像模糊检测

    我正在研究图像的模糊检测 我已经用过拉普拉斯方法的方差在 OpenCV 中 img cv2 imread imgPath gray cv2 cvtColor img cv2 COLOR BGR2GRAY value cv2 Laplacia
  • 在Python中从整个图像中检测表格部分

    我有一张尺寸为 3500x5000 的图像 现在我只想检测整个图像中的表格部分 如果不能直接进行 OCR 处理 则对其进行裁剪和旋转 经过所有搜索后 我想到了使用裁剪图像中的每个单元格的想法https medium com coinmonk
  • 旋转矩阵openCV

    我想知道如何找到框架中一组特征的旋转矩阵 我会更具体 我有 2 个具有 20 个特征的帧 假设第 1 帧和第 2 帧 我可以估计两个帧中特征的位置 例如 假设位置 x y 处的某个第 1 帧特征 并且我确切地知道它在哪里 所以假设为 x y
  • OpenCV Python 和 SIFT 功能

    我知道有很多关于Python and OpenCV但我没有找到有关这个特殊主题的帮助 我想提取SIFT关键点来自 python OpenCV 中的图像 我最近安装了 OpenCV 2 3 可以访问 SURF 和 MSER 但不能访问 SIF
  • 尝试使使用 OpenCV 的 java 应用程序(可执行 Jar)可移植。出现不满意的链接错误

    我制作了一个应用程序 用于从网络摄像头抓取视频并使用 OpenCV 和 JavaCV 检测运动 我正在尝试使用 eclipse 导出为可执行 jar 该程序在 eclipse 中运行良好 就像我编写该程序的计算机上的 exe jar 一样
  • OpenCV 地板分割检测

    我正在研究一种检测图像中地板的方法 我试图通过将图像缩小为颜色区域然后假设最大区域是地板来实现此目的 我们对机器人的运行环境做出一些相当广泛的假设 我正在寻找一些关于适合这个问题的算法的建议 任何帮助将不胜感激 编辑 具体来说 我正在寻找一
  • 在openCV内部调用Gstreamer

    我需要在 openCV 代码中调用 Gstremaer 本质上是打开摄像机 当我查看源代码时 modules highgui src cap gstreamer cpp似乎是我正在寻找的文件 我用 Gstreamer 标志编译了 OpenC
  • OpenCV SVM 给出奇怪的预测结果

    我对 OpenCV 和支持向量机都很陌生 我想使用 SVM 训练具有两个标签的数据集 然后预测给定集合的标签 我当前的集合包含大约 600 行 具有相等的类分布 1 为 300 行 1 为 300 行 包含 34 列 这是我当前用于设置 O
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • 使用 OpenCV 从轮廓获取掩模

    我想从我通过 cv findContours 计算的轮廓 它只存在 1 个轮廓 获取图像掩模 然而 虽然我的轮廓变量不为空 但我无法使用 cv drawContours 检索图像蒙版 我的目标图像始终为空 这是我的代码 img mosaic
  • 使用 OpenCV 描述符与 findFundamentalMat 匹配

    我之前发布了有关同一程序的问题 但没有收到答案 我已经纠正了当时遇到的问题 但又面临新的问题 基本上 我使用未校准的方法自动校正立体图像对的旋转和平移 我使用 SURF 等特征检测算法来查找两个图像 左右立体图像对 中的点 然后再次使用 S
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • Scalar(0,255,0) 在 opencv 中没有给出绿色线

    我正在尝试在图像上绘制渐变线 我希望我的线条是绿色的 并且我使用标量 0 255 0 不过 我只得到黑色 对于 Scalar 0 0 0 我也变黑了 对于 Scalar 255 255 255 我得到白色 但任何组合都没有其他颜色 部分代码
  • 使用 CLion 进行 OpenCV Windows 设置

    我想在 Windows 上为 CLion IDE 设置 OpenCV 我尝试使用 OpenCV 3 1 和 2 4 得到相同的结果 我有 Windows 10 64 位 CLion 使用 cygwin 环境 到目前为止我做了什么 1 从Op
  • opencv:如何将所有黑色像素转换为透明并将其保存到png文件

    如下图 我希望所有黑色像素都是透明的并将其保存为 png 文件 您可以像这样快速完成并矢量化 import cv2 import numpy as np Load image as Numpy array in BGR order na c
  • 从 PyCharm IDE 运行 Django 项目时出现“ImportError:没有名为 cv2 的模块”

    我正在从 PyCharm 运行一个 Django 项目 其配置设置为使用 virtualenv 中的 Python 解释器 该解释器依赖于 opencv 当我运行时 该网站在本地运行良好django admin py runserver 但

随机推荐

  • 深度学习_用LSTM+Attention与Self-Attention

    笔者在重新尝试用深度学习的各个模型对序列进行预测 就LSTM进行一些使用记录 一 一些优化 和keras一样的权重初始化 有时候我们torch训练的LSTM 没有keras好 可以将权重按keras的方式进行初始化 增加attention
  • Neo4j的下载与安装(完整详细版)

    简要 1 jdk安装 2 neo4j下载 3 neo4j环境配置 4 cmd启动 neo4j bat console 注意jdk的版本要11以上才可以和neo4j匹配 但我安装时用了16 0也报错了 然后重新下载了一个11的 就不报错了 具
  • base格式图片转文件存储

  • Docker 宿主机与容器直接文件移动命令

    1 将容器中的文件复制到宿主机 docker cp nginx test etc nginx usr local nginx 说明 nginx test 容器名称 etc nginx 容器目录存放目录 usr local nginx 宿主机
  • STM32使用FAT文件系统-代码简读

    FAT的一些基础知识 概念先看我这一篇 FAT32文件和目录的组织方式 fat32文件系统架构设计 暴躁的野生猿的博客 CSDN博客 fat文件系统的所有外部接口都在ff h中 物理驱动器 逻辑驱动器 一个物理驱动器就是一个真实的存储设备
  • mysql查询包含逗号的数据,并逗号拆分为多行展现

    在做系统开发的时候 有可能是由于之前的遗留问题 导致在数据入库的时候 将多个数据以逗号分隔的实行 存储在一条数据中 例如 ID VALUE 1 yang zheng song 2 zhao qian sun 3 jiang 现在因为新的需求
  • Anaconda创建并管理Python虚拟环境

    在使用Python进行一些开发或分析工作时 需要安装并使用大神们写的一些程序包 有的程序包只支持32位Python环境 有的支持64位Python环境 有的包支持最新版本 有的可能只支持以前版本 3 6或2 x 而且不同包之间还有版本依赖性
  • 基于深度学习OpenCV与python进行字符识别

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 当我们在处理图像数据集时 总是会想有没有什么办法以简单的文本格式检索图像中的这些字符呢 今天我们就一起看看有没有什么简单的办法可以实现这一功能 对于字符识别 我们找到了一
  • 性能测试,服务器资源监控工具nmon常用操作

    在性能测试过程中 对服务端的各项资源使用情况进行监控是很重要的一环 这篇博客 介绍下服务端监控工具 nmon的使用方法 一 认识nmon 1 简介 nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具 它能在系统运行过程
  • Linux驱动开发入门(二)VS code驱动开发配置

    开发环境配置 安装 配置 安装 VS code是一款功能强大的开源编辑器 能够在各个平台安装使用 如Linux Widows Mac 而我们Linux驱动直接运行在Linux上 所以下载安装在Linux平台 示例机系统为Ubuntu 20
  • OPC配置DCOM解决方案

    OPC配置DCOM解决方案 概述 随着对数据重要性的提升以及数据交换问题的重视 大家对免费的OPC server使用有所增加 下面跟大家分享一下解决OPC 配置DCOM困难问题 免去繁琐的工作量 直接导入变量解决OPC配置DCOM问题 适用
  • 使用k-means及k-prototype对混合型数据集进行聚类分析

    1 分析目标 本项目旨在使用聚类算法对110个城市进行分类与排序 以寻找客观真实的城市分层方法 支持业务运营与决策 2 数据集 数据集来源于某互联网公司 特征值标签已做脱敏处理 数据集尺寸为111行 5列 第一行为标题行 其余110行为实例
  • 小程序 调用微信支付

    首先调用小程序wx login登录接口 获取用户code 将code作为参数 传给后端 调用后端接口wechat pay prepay 获取后端 这五个返回值 nonceStr package2 paySign signType timeS
  • 理解Token没那么复杂,别被大佬们忽悠晕了

    区块链很火 Token很繁荣 甚至有些人开始高呼Token经济的时代已经到来了 Token经济真的来了吗 在我们看来 还言之过早 时下现状是 很多专家在谈Token 但大多数内容都是形而上 太飘渺 让人晦涩难懂 只适合业内人士的口味 不适合
  • 财报解读:上半年GMV超50亿元,交个朋友瞄准了更广阔的市场

    于今年7月曲线上市的交个朋友交出了首份 答卷 近日 交个朋友控股披露了2023年上半年财报 营收4 33亿元 同比增长215 5 经调整净利润约9463 5万元 同比暴增1798 全网合计GMV超50亿元 图源 交个朋友财报 交个朋友能取得
  • 如何用C++实现自己的Tensorflow

    原文 How To Write Your Own Tensorflow in C 作者 Ray Zhang 翻译 无阻我飞扬 摘要 TensorFlow是由谷歌基于DistBelief进行研发的第二代人工智能学习系统 其命名来源于本身的运行
  • 施乐s2110进入维修模式_施乐S2110维修手册(无密码)

    实例简介 施乐S2110维修手册 已清除密码版本的 防止密码忘了打不开 Docu Centre s2110 维修手册Ver10 发行 2017年5月 关于因设计变更等原因而修订维修手册 本维修手册用于下列产品 本维修手册的记载内容中出现相关
  • OpenCV Series : Target Box Outline Border

    角点 P1 0 255 000 000 P2 1 000 255 000 P3 2 000 000 255 P4 3 000 000 000 垂直矩形框 rect cv2 minAreaRect cnt targetColor roi co
  • 2.3.8 WPar(Workload Partition)工作负载分区

    最后更新2021 07 14 WPar是一种软分区 本质上与Power CPU无关 只要能运行AIX v6 1 就可以创建WPar 在AIX v6 1版安装的系统之内可以再生成若干AIX实例 所谓AIX实例是指完整的AIX运行环境 包括操作
  • OpenCV中LU分解实现矩阵求逆invert(DECOMP_LU)-定点化

    基于LU分解的矩阵求逆定点化版本 由于需要频繁移位 因此定点比浮点还耗时 浮点版本参考上一篇博客 http blog csdn net xidianzhimeng article details 51284206 话不过多 直接上代码 有不