This commit is contained in:
y.qiu
2025-02-25 15:18:25 +08:00
parent d8d888c045
commit c879408141
2 changed files with 30 additions and 10 deletions

View File

@ -505,6 +505,26 @@ double normalizeAngle(const double angle) {
return angle - k * 360.0;
}
void drawRegion(cv::Mat &img, const HRegion &region) {
auto *ptr = img.ptr<uchar>();
for (const auto &rle : region) {
auto *startPtr = ptr + rle.row * img.step + rle.startColumn;
for (int i = 0; i < rle.length; i++) {
*(startPtr + i) = 255;
}
}
}
void drawRegion(cv::Mat &img, const VRegion &region) {
auto *ptr = img.ptr<uchar>();
for (const auto &rle : region) {
auto *startPtr = ptr + rle.startRow * img.step + rle.col;
for (int i = 0; i < rle.length; i++) {
*(startPtr + i * img.step) = 255;
}
}
}
Model *trainModel(const cv::Mat &src, int level, double startAngle, double spanAngle,
double angleStep) {
if (src.empty() || src.channels() != 1) {

20
sum.cpp
View File

@ -60,9 +60,9 @@ inline void computeSumDiff(const cv::v_uint16x8 &start, const cv::v_uint16x8 &en
cv::v_int32x4 &diff0, cv::v_int32x4 &diff1) {
cv::v_int16x8 sub;
{
cv::v_int16x8 vStart = cv::v_reinterpret_as_s16(start);
cv::v_int16x8 vEnd = cv::v_reinterpret_as_s16(end);
sub = cv::v_sub(vEnd, vStart);
auto vStart = cv::v_reinterpret_as_s16(start);
auto vEnd = cv::v_reinterpret_as_s16(end);
sub = cv::v_sub(vEnd, vStart);
}
cv::v_int32x4 val = cv::v_expand_low(sub);
@ -138,7 +138,7 @@ void shiftH(const cv::Mat &src, const HRegion &hRegion, int row, cv::Mat &sum, c
cv::v_int32x4 diff13 = cv::v_setzero_s32();
for (const auto &rle : hRegion) {
auto *startPtr = srcPtr + (row + rle.row) * src.step + rle.startColumn + i;
auto *startPtr = srcPtr + (row + rle.row) * src.step + rle.startColumn + i - 1;
auto *endPtr = startPtr + rle.length;
auto vStart = cv::v_load(startPtr);
@ -172,13 +172,13 @@ void shiftH(const cv::Mat &src, const HRegion &hRegion, int row, cv::Mat &sum, c
int32_t partSum = 0;
int32_t partSqSum = 0;
for (const auto &rle : hRegion) {
auto *startPtr = srcPtr + (row + rle.row) * src.step + rle.startColumn + i;
auto *startPtr = srcPtr + (row + rle.row) * src.step + rle.startColumn + i - 1;
auto *endPtr = startPtr + rle.length;
auto start = *startPtr;
auto end = *endPtr;
partSum += end - start;
partSqSum += end * end - start * start;
int32_t start = *startPtr;
int32_t end = *endPtr;
partSum += end - start;
partSqSum += end * end - start * start;
}
auto *sumPtrStart = sumPtr + i;
@ -196,7 +196,7 @@ void shiftV(const cv::Mat &src, const VRegion &vRegion, int row, cv::Mat &sum, c
int32_t partSum = 0;
int32_t partSqSum = 0;
for (const auto &rle : vRegion) {
auto *startPtr = srcPtr + (row + rle.startRow) * src.step + rle.col;
auto *startPtr = srcPtr + (row + rle.startRow - 1) * src.step + rle.col;
auto *endPtr = startPtr + rle.length * src.step;
int32_t start = *startPtr;