表格线识别通用库文档
载入中...
搜索中...
未找到
cm::Projection类 参考

投影类 更多...

#include <projection.hpp>

Public 成员函数

 Projection ()
 投影类的默认构造函数
 
 Projection (const Projection &projection)
 投影类的拷贝构造函数
 
 Projection (Projection &&projection)
 投影类的移动构造函数
 
 Projection (const cv::Mat &binary_image)
 投影类的带参构造函数
 
 ~Projection ()
 投影类的析构函数
 
Projectionoperator= (const Projection &projection)
 投影类的拷贝赋值函数
 
Projectionoperator= (Projection &&projection)
 投影类的移动赋值函数
 
ProjectionReserve (size_t height, size_t width)
 重置投影图像所对应投影数据空间大小
 
ProjectionResize (size_t height, size_t width)
 重置投影图对象的大小
 
ProjectionAssign (const Projection &projection)
 重新赋值一份投影
 
ProjectionAssign (const cv::Mat &binary_image)
 重新赋值一份投影
 
ProjectionSwap (Projection &projection)
 交换投影
 
ProjectionClear ()
 清空投影类所有数据
 
cv::Mat Image (Direction direction, Interval row_range=Interval::All(), Interval col_range=Interval::All()) const
 获取指定行区间和列区间的投影图像图像
 
cv::Mat Image (Direction direction, const Rect &rect) const
 获取指定区域的投影图像图像
 
List< size_tValue (Direction direction, Interval row_range=Interval::All(), Interval col_range=Interval::All()) const
 获取指定行区间和列区间的投影值
 
List< size_tValue (Direction direction, const Rect &rect) const
 获取指定区域的投影值
 
size_t Row (size_t index, Interval col_range=Interval::All()) const
 获取横向投影中指定行的投影值
 
size_t Col (size_t index, Interval row_range=Interval::All()) const
 获取纵向投影中指定列的投影值
 
size_t Height () const
 获取投影图像区域高度
 
size_t Width () const
 获取投影图像区域宽度
 
Rect Boundary (double hdir_threshold=0.005, double vdir_threshold=0.005, int margin=20) const
 根据投影获取图像的边界
 
Intervals ExtractPeak (Direction direction, size_t min_proj_value, size_t min_peak_span, Interval row_range=Interval::All(), Interval col_range=Interval::All(), bool is_absolute_coord=true) const
 根据指定的行区间和列区间投影抽取波峰
 
Intervals ExtractPeak (Direction direction, size_t min_proj_value, size_t min_peak_span, const Rect &rect, bool is_absolute_coord=true) const
 根据指定的区域投影抽取波峰
 
Intervals ExtractTrough (Direction direction, size_t max_proj_value, size_t min_trough_span, Interval row_range=Interval::All(), Interval col_range=Interval::All(), bool is_absolute_coord=true) const
 根据指定的行区间和列区间投影抽取波谷
 
Intervals ExtractTrough (Direction direction, size_t max_proj_value, size_t min_trough_span, const Rect &rect, bool is_absolute_coord=true) const
 根据指定的区域投影抽取波谷
 

静态 Public 成员函数

template<typename INDEXED >
static Intervals ExtractPeak (INDEXED &projection, const Interval &interval, size_t min_proj_value, size_t min_peak_span)
 根据投影抽取所有波峰区间
 
template<typename INDEXED >
static Intervals ExtractTrough (INDEXED &projection, const Interval &interval, size_t max_proj_value, size_t min_trough_span)
 根据投影抽取所有波谷区间
 

详细描述

投影类

该类用于处理图像投影,包括横向和纵向投影,并提供相关操作方法和功能。支持投影数据的存储、操作和提取,以及峰值和谷值的提取等功能。

注解
横向投影对应于图像的列投影,纵向投影对应于图像的行投影。
示例
void Test(cv::Mat image1, cv::Mat image2) {
// 创建投影对象
// 测试投影对象方法
cv::Mat image_horizontal = proj.Image(cm::HDIR, cm::Interval(100, 200), cm::Interval(0, 100));
cv::Mat image_vertical = proj.Image(cm::VDIR, cm::Rect(0, 0, 100, 100));
auto values_vertical = proj.Value(cm::VDIR, cm::Rect(0, 0, 100, 100));
size_t row_value = proj.Row(5, cm::Interval(0, 100));
size_t col_value = proj.Col(10, cm::Interval(0, 100));
size_t height = proj.Height();
size_t width = proj.Width();
cm::Rect boundary = proj.Boundary(0.01, 0.01, 20);
proj.Assign(image2);
cm::Intervals peaks = proj.ExtractPeak(cm::HDIR, cm::Interval(100, 200), cm::Interval(0, 100));
cm::Intervals troughs = proj.ExtractTrough(cm::VDIR, 200, 3, cm::Rect(0, 0, 100, 100));
cm::Intervals extracted_peaks = proj.ExtractPeak(proj, cm::Interval(50, 150), 100, 5);
cm::Intervals extracted_troughs = proj.ExtractTrough(proj, cm::Interval(50, 150), 200, 3);
}
区间类
Definition interval.hpp:29
区间列表类
Definition intervals.hpp:29
点类
Definition point.hpp:52
矩形类
Definition rect.hpp:31
@ HDIR
横向
Definition enum.h:116
@ VDIR
纵向
Definition enum.h:118
作者
dreamy-xay
日期
2023-12-04

在文件 projection.hpp66 行定义.

构造及析构函数说明

◆ Projection() [1/4]

cm::Projection::Projection ( )
inline

投影类的默认构造函数

该构造函数初始化投影类对象的各项属性,包括投影图像区域的高度、宽度以及其他内部数据结构。

作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp125 行定义.

◆ Projection() [2/4]

cm::Projection::Projection ( const Projection & projection)
inline

投影类的拷贝构造函数

该拷贝构造函数会创建一个新的投影类对象,并将传入的投影对象的属性值复制给新对象。

参数
projection被拷贝的投影对象
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp136 行定义.

函数调用图:

◆ Projection() [3/4]

cm::Projection::Projection ( Projection && projection)
inline

投影类的移动构造函数

该移动构造函数会接管传入的投影对象的资源,并将其置为空,防止二次释放空间。同时更新当前类的所有信息,包括高度、宽度以及其他内部数据结构的指针。

参数
projection被移动的投影对象
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp155 行定义.

◆ Projection() [4/4]

cm::Projection::Projection ( const cv::Mat & binary_image)
inline

投影类的带参构造函数

该构造函数会创建一个新的投影类对象,并根据传入的二值图像计算投影信息。

参数
binary_image二值图
注解
通常情况下,算法仅支持单通道图像,因此灰度图像也可以作为投影对象。由于算法的底层实现是通过前缀和整除操作实现的,对于灰度图来说,投影值会受到像素值范围为 [1, 255) 的灰度像素的影响。
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp179 行定义.

函数调用图:

◆ ~Projection()

cm::Projection::~Projection ( )
inline

投影类的析构函数

该析构函数用于释放投影类对象所占用的空间和资源。

作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp196 行定义.

成员函数说明

◆ Assign() [1/2]

Projection & cm::Projection::Assign ( const cv::Mat & binary_image)
inline

重新赋值一份投影

该方法用于通过 OpenCV 的 Mat 对象,重新为投影对象赋值,实现类似 STL 容器的 assign 功能。

注意
Assign 方法的效率比直接构造一个新的投影对象的效率高。特别是当赋值的图像数据大小不变或者有所减小时,Assign 方法能够减少分配投影数据空间的步骤。
参数
binary_image二值图(单通道图像)
注解
通常情况下,算法仅支持单通道图像,因此灰度图像也可以作为投影对象。由于算法的底层实现是通过前缀和整除操作实现的,对于灰度图来说,投影值会受到像素值范围为 [1, 255) 的灰度像素的影响。
返回
类自身引用,方便链式调用
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp424 行定义.

函数调用图:

◆ Assign() [2/2]

Projection & cm::Projection::Assign ( const Projection & projection)
inline

重新赋值一份投影

该方法用于通过 OpenCV 的 Mat 对象,重新为投影对象赋值,实现类似 STL 容器的 assign 功能。

注意
Assign 方法的效率比直接构造一个新的投影对象的效率高。特别是当赋值的图像数据大小不变或者有所减小时,Assign 方法能够减少分配投影数据空间的步骤。
参数
projection另一份投影
返回
类自身引用,方便链式调用
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp387 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ Boundary()

Rect cm::Projection::Boundary ( double hdir_threshold = 0.005,
double vdir_threshold = 0.005,
int margin = 20 ) const
inline

根据投影获取图像的边界

该方法用于根据给定的横向和纵向投影阈值,以及边缘外扩像素值,计算出图像的边界区域。

参数
hdir_threshold横向投影阈值(阈值条件:投影值 >= 横向投影阈值 * 图像宽度,从上至下,从下至上,第一次满足阈值条件则视为图像边界区域) 默认为 0.005
vdir_threshold纵向投影阈值(阈值条件:投影值 >= 纵向投影阈值 * 图像高度,从左至右,从右至左,第一次满足阈值条件则视为图像边界区域) 默认为 0.005
margin边缘外扩像素值 默认为 20
返回
图像边界矩形区域
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp681 行定义.

◆ Clear()

Projection & cm::Projection::Clear ( )
inline

清空投影类所有数据

该方法用于清空投影类中所有数据,但保留已分配的空间。在确保存在图像投影的情况下,将投影数据置零,同时将对应图像的高度和宽度清零。

返回
类自身引用,方便链式调用
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp488 行定义.

这是这个函数的调用关系图:

◆ Col()

size_t cm::Projection::Col ( size_t index,
Interval row_range = Interval::All() ) const
inline

获取纵向投影中指定列的投影值

该方法用于获取纵向投影中指定列的投影值,通过给定的列索引和行区间范围,在 O(1) 的时间复杂度内计算出对应的投影值。

参数
index列索引
row_range行区间 默认为 Interval::All()
返回
纵向投影中指定列的投影值
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp632 行定义.

这是这个函数的调用关系图:

◆ ExtractPeak() [1/3]

Intervals cm::Projection::ExtractPeak ( Direction direction,
size_t min_proj_value,
size_t min_peak_span,
const Rect & rect,
bool is_absolute_coord = true ) const
inline

根据指定的区域投影抽取波峰

该方法用于根据给定的投影方向、最小投影值、最小波峰跨度等参数,从指定的矩形区域(即按矩形区域裁剪后的子图像)中抽取波峰区间列表。横向投影的时间复杂度为 O(矩形区域的高度),纵向投影的时间复杂度为 O(矩形区域的宽度)。

参数
direction投影的方向, 横向 或者 纵向
min_proj_value波峰中的最小投影值
min_peak_span最小波峰跨度
rect投影的矩形区域
is_absolute_coord是否采用绝对坐标系(绝对坐标系指的是区域信息相对于整个图像的坐标系统而定;相对坐标系则是指区域信息是基于特定投影区域内图像的坐标系统来确定的) 默认是 true
返回
指定区域的波峰区间列表
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp773 行定义.

函数调用图:

◆ ExtractPeak() [2/3]

Intervals cm::Projection::ExtractPeak ( Direction direction,
size_t min_proj_value,
size_t min_peak_span,
Interval row_range = Interval::All(),
Interval col_range = Interval::All(),
bool is_absolute_coord = true ) const
inline

根据指定的行区间和列区间投影抽取波峰

该方法用于根据给定的投影方向、最小投影值、最小波峰跨度等参数,从指定的行区间和列区间(即按行和列裁剪后的子图像)中抽取波峰区间列表。横向投影的时间复杂度为 O(行区间长度),纵向投影的时间复杂度为 O(列区间长度)。

参数
direction投影的方向, 横向 或者 纵向
min_proj_value波峰中的最小投影值
min_peak_span最小波峰跨度
row_range行区间 默认为 Interval::All()
col_range列区间 默认为 Interval::All()
is_absolute_coord是否采用绝对坐标系(绝对坐标系指的是区域信息相对于整个图像的坐标系统而定;相对坐标系则是指区域信息是基于特定投影区域内图像的坐标系统来确定的) 默认是 true
返回
指定的行区间和列区间的波峰区间列表
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp736 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ ExtractPeak() [3/3]

template<typename INDEXED >
Intervals cm::Projection::ExtractPeak ( INDEXED & projection,
const Interval & interval,
size_t min_proj_value,
size_t min_peak_span )
inlinestatic

根据投影抽取所有波峰区间

该方法用于根据给定的投影数据、投影区间、最小投影值和最小波峰跨度,提取出所有满足波峰条件的区间列表。

模板参数
INDEXED可索引对象类型(如数组、向量等)
参数
projection投影数据(支持任何可索引对象)
interval需要计算的投影区间
min_proj_value波峰中的最小投影值
min_peak_span最小波峰跨度
返回
波峰区间列表
作者
dreamy-xay
日期
2023-10-18

在文件 projection.hpp854 行定义.

◆ ExtractTrough() [1/3]

Intervals cm::Projection::ExtractTrough ( Direction direction,
size_t max_proj_value,
size_t min_trough_span,
const Rect & rect,
bool is_absolute_coord = true ) const
inline

根据指定的区域投影抽取波谷

该方法用于根据给定的投影方向、最大投影值、最小波谷跨度等参数,从指定的矩形区域(即按矩形区域裁剪后的子图像)中抽取波谷区间列表。横向投影的时间复杂度为 O(矩形区域的高度),纵向投影的时间复杂度为 O(矩形区域的宽度)。

参数
direction投影的方向, 横向 或者 纵向
max_proj_value波谷中的最大投影值
min_trough_span最小波谷跨度
rect投影的矩形区域
is_absolute_coord是否采用绝对坐标系(绝对坐标系指的是区域信息相对于整个图像的坐标系统而定;相对坐标系则是指区域信息是基于特定投影区域内图像的坐标系统来确定的) 默认是 true
返回
指定区域的波谷区间列表
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp832 行定义.

函数调用图:

◆ ExtractTrough() [2/3]

Intervals cm::Projection::ExtractTrough ( Direction direction,
size_t max_proj_value,
size_t min_trough_span,
Interval row_range = Interval::All(),
Interval col_range = Interval::All(),
bool is_absolute_coord = true ) const
inline

根据指定的行区间和列区间投影抽取波谷

该方法用于根据给定的投影方向、最大投影值、最小波谷跨度等参数,从指定的行区间和列区间(即按行和列裁剪后的子图像)中抽取波谷区间列表。横向投影的时间复杂度为 O(行区间长度),纵向投影的时间复杂度为 O(列区间长度)。

参数
direction投影的方向, 横向 或者 纵向
max_proj_value波谷中的最大投影值
min_trough_span最小波谷跨度
row_range行区间 默认为 Interval::All()
col_range列区间 默认为 Interval::All()
is_absolute_coord是否采用绝对坐标系(绝对坐标系指的是区域信息相对于整个图像的坐标系统而定;相对坐标系则是指区域信息是基于特定投影区域内图像的坐标系统来确定的) 默认是 true
返回
指定的行区间和列区间的波谷区间列表
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp794 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ ExtractTrough() [3/3]

template<typename INDEXED >
Intervals cm::Projection::ExtractTrough ( INDEXED & projection,
const Interval & interval,
size_t max_proj_value,
size_t min_trough_span )
inlinestatic

根据投影抽取所有波谷区间

该方法用于根据给定的投影数据、投影区间、最大投影值和最小波谷跨度,提取出所有满足波谷条件的区间列表。

模板参数
INDEXED可索引对象类型(如数组、向量等)
参数
projection投影数据(支持任何可索引对象)
max_proj_value波谷中的最大投影值
min_trough_span最小波谷跨度
返回
波谷区间列表
作者
dreamy-xay
日期
2023-10-18

在文件 projection.hpp891 行定义.

◆ Height()

size_t cm::Projection::Height ( ) const
inline

获取投影图像区域高度

该方法用于获取投影图像区域的高度,即投影图像图像的行数。

返回
投影图像区域高度
作者
dreamy-xay
日期
2023-12-06

在文件 projection.hpp651 行定义.

◆ Image() [1/2]

cv::Mat cm::Projection::Image ( Direction direction,
const Rect & rect ) const
inline

获取指定区域的投影图像图像

该方法用于获取指定区域的投影图像图像,即按矩形区域裁剪后的子图像的投影图像图像,按照给定的方向进行投影。在保证矩形区域在图像的高度和宽度范围内的前提下,生成对应的投影图像。横向投影的时间复杂度为 O(矩形区域的高度),纵向投影的时间复杂度为 O(矩形区域的宽度)。

参数
direction投影的方向, 横向 或者 纵向
rect投影的矩形区域
返回
指定区域的投影图像图像
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp547 行定义.

函数调用图:

◆ Image() [2/2]

cv::Mat cm::Projection::Image ( Direction direction,
Interval row_range = Interval::All(),
Interval col_range = Interval::All() ) const
inline

获取指定行区间和列区间的投影图像图像

该方法用于获取指定行区间和列区间的投影图像图像,即按行和列裁剪后的子图像的投影图像图像,按照给定的方向进行投影。在保证行区间和列区间在图像的高度和宽度范围内的前提下,生成对应的投影图像。横向投影的时间复杂度为 O(行区间长度),纵向投影的时间复杂度为 O(列区间长度)。

参数
direction投影的方向, 横向 或者 纵向
row_range行区间 默认为 Interval::All()
col_range列区间 默认为 Interval::All()
返回
指定行区间和列区间的投影图像图像
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp517 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ operator=() [1/2]

Projection & cm::Projection::operator= ( const Projection & projection)
inline

投影类的拷贝赋值函数

该拷贝赋值函数用于将另一个投影对象的数据拷贝给当前对象。

参数
projection另一个投影对象
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp209 行定义.

函数调用图:

◆ operator=() [2/2]

Projection & cm::Projection::operator= ( Projection && projection)
inline

投影类的移动赋值函数

该移动赋值函数用于将另一个投影对象的资源移动给当前对象,并更新相关信息。

参数
projection投影
注解
主要算法步骤如下:
  • 释放当前类原有空间。
  • 更新当前类的所有信息。
  • 将另一个对象的指针置为空,防止二次释放空间。
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp230 行定义.

◆ Reserve()

Projection & cm::Projection::Reserve ( size_t height,
size_t width )
inline

重置投影图像所对应投影数据空间大小

该方法用于重新设置投影对象对应的投影数据空间大小,类似于 STL 容器的 reserve 功能,如果需要重置的空间大小小于当前已分配空间大小,则不执行重置操作。

参数
height投影图像高度
width投影图像宽度
返回
类自身引用,方便链式调用
注解
cm::Projection 是一个动态容器,它可以根据需要自动调整其容量以存储更多的内容。Reserve 方法用于请求改变投影空间的容量(即能够存储的元素数量),而无需重新分配内存。该方法的主要目的是优化性能,减少由于重复赋值投影对象时可能发生的多次内存重新分配。因此,Reserve 方法并不直接支持减少容器的容量,但可以通过其他方式间接实现减少容量的目的,其中最常用的方法是使用 Swap 技巧。
注意
Reserve 方法并不会直接修改实际投影的宽度和高度,而只会修改投影内存空间的大小。
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp342 行定义.

◆ Resize()

Projection & cm::Projection::Resize ( size_t height,
size_t width )
inline

重置投影图对象的大小

该方法用于重新设置投影对象的大小,类似于 STL 容器的 resize 功能。

参数
height投影图像高度
width投影图像宽度
返回
类自身引用,方便链式调用
注解
与 Reserve 方法不同的是,Resize 方法直接改变了投影对象中的数据大小,根据需要添加新数据或删除现有数据以达到指定的大小。简单来说,Resize 方法会删除图像的投影数据或者增加空白的投影数据。接下来将从几个方面详细探讨 Resize 与 Reserve 的区别:
  • 作用不同:Resize 改变投影对象中数据的大小,而 Reserve 改变的是投影对象可以容纳的数据空间(即容量),而不改变当前数据的大小。
  • 影响不同:Resize 可以增加或减少投影对象中的数据大小,Reserve 主要用于防止在重复赋值投影对象时发生多次内存分配。
  • 使用场景不同:当需要改变投影对象中的实际数据大小时,请使用 Resize;当想优化重复赋值投影对象的性能,避免多次内存分配时,请使用 Reserve。
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp365 行定义.

◆ Row()

size_t cm::Projection::Row ( size_t index,
Interval col_range = Interval::All() ) const
inline

获取横向投影中指定行的投影值

该方法用于获取横向投影中指定行的投影值,通过给定的行索引和列区间范围,在 O(1) 的时间复杂度内计算出对应的投影值。

参数
index行索引
col_range列区间 默认为 Interval::All()
返回
横向投影中指定行的投影值
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp610 行定义.

这是这个函数的调用关系图:

◆ Swap()

Projection & cm::Projection::Swap ( Projection & projection)
inline

交换投影

该方法用于交换当前投影对象与另一份投影对象的数据,类似于 STL 容器的 swap 方法,时间复杂度为 O(1)。

参数
projection另一份投影
返回
类自身引用,方便链式调用
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp467 行定义.

◆ Value() [1/2]

List< size_t > cm::Projection::Value ( Direction direction,
const Rect & rect ) const
inline

获取指定区域的投影值

该方法用于获取指定区域的投影值,即按矩形区域裁剪后的子图像的投影值,按照给定的方向进行投影。在保证矩形区域在图像的高度和宽度范围内的前提下,计算对应的投影值。横向投影的时间复杂度为 O(矩形区域的高度),纵向投影的时间复杂度为 O(矩形区域的宽度)。

参数
direction投影的方向, 横向 或者 纵向
rect投影的矩形区域
返回
指定区域的投影值
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp593 行定义.

函数调用图:

◆ Value() [2/2]

List< size_t > cm::Projection::Value ( Direction direction,
Interval row_range = Interval::All(),
Interval col_range = Interval::All() ) const
inline

获取指定行区间和列区间的投影值

该方法用于获取指定行区间和列区间的投影值,即按行和列裁剪后的子图像的投影值,按照给定的方向进行投影。在保证行区间和列区间在图像的高度和宽度范围内的前提下,计算对应的投影值。横向投影的时间复杂度为 O(行区间长度),纵向投影的时间复杂度为 O(列区间长度)。

参数
direction投影的方向, 横向 或者 纵向
row_range行区间 默认为 Interval::All()
col_range列区间 默认为 Interval::All()
返回
指定行区间和列区间的投影值
作者
dreamy-xay
日期
2023-12-05

在文件 projection.hpp565 行定义.

这是这个函数的调用关系图:

◆ Width()

size_t cm::Projection::Width ( ) const
inline

获取投影图像区域宽度

该方法用于获取投影图像区域的宽度,即投影图像图像的列数。

返回
投影图像区域宽度
作者
dreamy-xay
日期
2023-12-06

在文件 projection.hpp664 行定义.


该类的文档由以下文件生成: