OpenCV——多分辨率LBP的计算方法

目录

  • 一、算法原理
    • 1、原理概述
    • 2、参考文献
  • 二、代码实现
  • 三、结果展示

在这里插入图片描述

OpenCV——多分辨率LBP的计算方法由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。

一、算法原理

1、原理概述

  基本LBP算子虽然在早期的实验中取得了一系列成果,但是应用于不同领域的具体问题时,该算子的处理结果并不能达到预期的效果。因此,很多学者对其进行了改进,并取得了显著成果。改进算子主要有多分辨率LBP、旋转不变LBP和等价LBP等。

  TimoOjala等_对基本LBP进行拓展,拓展后的多分辨率LBP不再仅仅是 3 × 3 3\times3 3×3格网,而是可以设置邻域像素数量和半径,通常用 P P P表示邻域像素个数,用 R R R表示半径,记为LBP_PR;与此同时,运用了插值的思想,将邻域窗口由方形拓展为圆形。基本LBP是邻域像素数量P=8,半径R=1.0的版本。下图描述了P和R取不同值时的情况。
在这里插入图片描述

多分辨率LBP
  从图中可以看出,只要不断改变窗口大小,即改变P和R的值,LBP就具备了多分辨率识别的特性,TimoOjala等人通过实验得出,将图像的灰度直方图和LBP特征结合可以增强分类效果。

2、参考文献

[1] 马新江. 基于多元LBP特征的车载激光点云中道路边界提取[D].山东科技大学,2019.

二、代码实现

#include<iostream>
#include<opencv2/opencv.hpp>using namespace std;// 多分辨率LBP
cv::Mat ExpandLocalBinaryPattern(cv::Mat& orignImg, int lbpRadius = 3, int maxCount = 20)
{cv::Mat grayImg;cvtColor(orignImg, grayImg, cv::COLOR_BGR2GRAY);int offset = lbpRadius * 2;cv::Mat elbpImg = cv::Mat::zeros(grayImg.rows - offset, grayImg.cols - offset, CV_8UC1);int numNeighbor = 8;for (int n = 0; n < numNeighbor; n++){float x = lbpRadius * cos((2 * CV_PI * n) / numNeighbor);float y = lbpRadius * (-sin((2 * CV_PI * n) / numNeighbor));int fx = static_cast<int>(floor(x)); // 向下取整,它返回的是小于或等于函数参数,并且与之最接近的整数int fy = static_cast<int>(floor(y));int cx = static_cast<int>(ceil(x));  // 向上取整,它返回的是大于或等于函数参数,并且与之最接近的整数int cy = static_cast<int>(ceil(y));float ty = y - fy;float tx = x = fx;float w1 = (1 - tx) * (1 - ty);float w2 = (tx) * (1 - ty);float w3 = (1 - tx) * (ty);float w4 = (tx) * (ty);for (int row = lbpRadius; row < (grayImg.rows - lbpRadius); row++){for (int col = lbpRadius; col < (grayImg.cols - lbpRadius); col++){float t = w1 * grayImg.at<uchar>(row + fy, col + fx) +w2 * grayImg.at<uchar>(row + fy, col + cx) +w3 * grayImg.at<uchar>(row + cy, col + fx) +w4 * grayImg.at<uchar>(row + cy, col + cx);elbpImg.at<uchar>(row - lbpRadius, col - lbpRadius) +=((t > grayImg.at<uchar>(row, col)) && (abs(t - grayImg.at<uchar>(row, col)) > std::numeric_limits<float>::epsilon())) << n;}}}return elbpImg;
}int main(int argc, char** argv)
{cv::Mat img = cv::imread("luna.png");//cv::Mat img;//resize(img, img, cv::Size(800, 500), 0, 0, cv::INTER_AREA);if (img.empty()){cout << "请确认图像文件名称是否正确" << endl;return -1;}imshow("img", img);// 多分辨率LBPcv::Mat lbpImg = ExpandLocalBinaryPattern(img);imshow("多分辨率LBP", lbpImg);cv::waitKey(0);return 0;}

三、结果展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/338895.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TensorFlow相关组件的安装

安装Anaconda3 安装Anaconda3的时候可以安装在任意磁盘中&#xff0c;在勾选path的时候全部勾选即可。更换Anaconda3的下载源为清华大学源&#xff0c;在此期间不要打开Anaconda3&#xff0c;在cmd中依次输入以下即可&#xff1a; conda config --add channels https://mirro…

Vue3 子传父 暴露数据 defineExpose

defineExpose 属性&#xff1a;用于将子组件中的数据和方法&#xff0c;暴露给父组件&#xff0c;父组件再配合 ref 属性使用。 语法格式 // 子组件&#xff1a;暴露数据和方法 defineExpose({ 数据, 数据, 方法 });// 父组件&#xff1a;使用数据和方法 ref名称.value.数据 …

2024.1.11每日一题

LeetCode 2645.构造有效字符串的最少插入数 2645. 构造有效字符串的最少插入数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个字符串 word &#xff0c;你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次&#xff0c;返回使 word 有效 需要插入的最少字…

进程、线程、协程的对比、区别和联系,进程之间的通信方式、线程之间的通信方式、协程之间的通信方式

前言 之前的一篇文章曾写过一些关于进程、线程、协程的内容——进程、线程、协程… … ——任务管理器的性能里都有什么&#xff1f;那么多的线程&#xff0c;进程、线程、句柄都是什么&#xff1f; 但对其之间的通信方式还是没有太过详细了解&#xff0c;因此特写此&#xf…

【LeetCode每日一题】2645. 构造有效字符串的最少插入数(计算组数+动态规划+考虑相邻字母)

2024-1-11 文章目录 [2645. 构造有效字符串的最少插入数](https://leetcode.cn/problems/minimum-additions-to-make-valid-string/)方法一&#xff1a;计算组数方法二&#xff1a;动态规划方法三: 考虑相邻字母 2645. 构造有效字符串的最少插入数 方法一&#xff1a;计算组数 …

【IC设计】ICer‘s 乾坤大挪移——FSM状态机

目录 理论解读写几段式状态机&#xff1f; 设计实战两种state的FSM&#xff08;异步复位&#xff09; 理论解读 写几段式状态机&#xff1f; 设计实战 两种state的FSM&#xff08;异步复位&#xff09; 实现下图所示的摩尔状态机&#xff0c;复位为异步复位。 代码实现&am…

多无人机编队飞行

matlab2020可运行 GitHub - Zhao-Jichao/Distributed_optimal_-formation_control_of_heterogeneous_multi-agent_systems_with_mixed-orders: 异构混合阶多智能体系统编队控制的分布式优化

【添加墨水注意事项]

添加墨水注意事项 当液位灯亮起时请添加墨水&#xff0c;添加墨水应时戴好护目镜和手套.注意墨水不要洒在设备注意墨水要避光保护防止固化 请使用本公司配套专用墨水&#xff0c;添加时注意墨水颜色 禁止儿童接触墨水及容器&#xff0c;如不慎接触眼睛或者误服应立即以大量清…

安全漏洞周报(2024.01.01-2023.01.08)

漏洞速览 ■ 用友CRM系统存在逻辑漏洞 漏洞详情 1. 用友CRM系统存在逻辑漏洞 漏洞介绍&#xff1a; 某友CRM系统是一款综合性的客户关系管理软件&#xff0c;旨在帮助企业建立和维护与客户之间的良好关系。它提供了全面的功能&#xff0c;包括销售管理、市场营销、客户服…

K8S 存储卷

意义&#xff1a;存储卷----数据卷 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的&#xff0c;delete,k8s用控制器创建的pod&#xff0c;delete相当于重启&#xff0c;容器的状态也会回复到初始状态 一旦回到初始状态&#xff0c;所有的后天编辑的文件…

机器人制作开源方案 | 乒乓球自动拾取机器人

作者&#xff1a;刘众森、王森、王绘东、崔岳震、宋维鑫 单位&#xff1a;山东农业工程学院 指导老师&#xff1a;潘莹月、廖希杰 1. 场景调研 我们小组选择项目的任务方向乒乓球的捡取与存放&#xff0c;针对此问题我们研发了一款乒乓球自动拾取机器人。众所周知&#xff0…

序列模型(4)—— Scaling Laws

本文介绍 LLM 训练过程中重要的 Scaling Laws&#xff0c;这是一个经验规律&#xff0c;指出了固定训练成本&#xff08;总计算量FLOPs&#xff09; C C C 时&#xff0c;如何调配模型规模&#xff08;参数量&#xff09; N N N 和训练 Token 数据量 D D D&#xff0c;才能实现…