Question List in October, 2022
Try to adapt this new life.
1、工作记录
工作内容不对外公开。
2、基础知识
开源 GIS 工具网站 :https://www.pianshen.com/article/72731502475/
2.1 遥感影像滤波
方案一确认 3000m 缓冲距离,可以配置缓冲距离的大小;方案二 是确认 DEM 最小值滤波,然后可以配置滤波窗口的大小,初期打算先用数学工具试试。
mac+vscode+python
#mac-python
# 安装 PIP
curl 'https://bootstrap.pypa.io/get-pip.py' > get-pip.py
sudo python get-pip.py
sudo easy_install pip
brew install gdal # 安装 GDAL 库需要先用 brew 在电脑上安装
python3 -m pip install gdal # 安装 GDAL
python3 -m pip install opencv-python # 安装 cv2
global mapper
地图绘制软件,可以用来生成地形晕染图。
为什么 OpenCV 的滤波那么快?有加速算法。
能不能对自己写的最小值也进行一个加速?参考常量阶最小值滤波优化算法。
Gaussian
高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。离模板中心的距离越远,高斯滤波器的模板系数越小,因此高斯滤波器相比于均值滤波器对图像的模糊程度较小。二维高斯函数的数学形式如下所示:
式中,\(x^2+y^2\) 表示邻域内其他像素与邻域内中心像素的距离,\(\sigma\) 表示标准差;二维高斯的图形表现为二维正态分布曲面;\(\sigma\) 越小则正态分布曲面越向上凸起,反之 \(\sigma\) 越大,正态分布曲面越平缓。
由上图可知,\(\sigma\) 越大则高斯滤波越趋近于均值滤波,\(\sigma\) 越小则高斯滤波中间像素的影响力越大,高斯滤波将更趋近于原始图像。OpenCV 的高斯核计算函数为:
式中,\(s_k\) 为 Kernel Size 卷积核的大小,应为奇数;\(\alpha\) 为令 \(\sum_iG_i=1\) 的归一化参数;当传入函数的 \(s_k=0\) 时 CV 将采用如下的方式计算默认的标准差大小。
常量阶最小值滤波算法
参考 Daniel Lemire 的 《Streming maximum-minimum filter using no more than three comparisons per element》论文进行实现。下面粘贴 C++ 的最小值版本:
#include <deque>
#include <vector>
#include <cstdio>
const int maxn = 10;
std::deque <int> L;
std::vector<int> minval(maxn);
int main(){
std::vector<int> a =
{0, 1, 9, 8, 2, 3, 7, 6, 4, 5};
// 0, 0, 1, 2, 2, 2, 3, 4, 4, 4
// 0, 0, 0, 1, 2, 2, 2, 3, 4, 4
unsigned int w = 5;
for(unsigned int i = 1; i < a.size(); i++){
if(i >= w){
minval[i - w] = a[L.size() > 0 ? L.front() : i-1];
}
if(a[i] > a[i-1]){
L.push_back(i - 1);
if(i == w + L.front()) L.pop_front();
}
else{
while(L.size() > 0){
if(a[i] >= a[L.back()]){
if(i == w + L.front()) L.pop_front();
break;
}
L.pop_back();
}
}
}
minval[a.size() - w] = a[L.size() > 0 ? L.front() : a.size() - 1];
unsigned int w_2 = w / 2;
int f = minval[0];
int b = minval[a.size() - w];
std::vector<int> res;
while(w_2 > 0){
res.push_back(f);
w_2--;
}
for(unsigned int i = 0; i <= a.size() - w; i++){
res.push_back(minval[i]);
}
w_2 = w / 2;
while(w_2 > 0){
res.push_back(b);
w_2--;
}
for(unsigned int i = 0; i < res.size(); i++){
printf("%d ", res[i]);
}
return 0;
}
2.2 QGIS DEM 三维可视化
参见参考文献 10 的处理步骤。渲染效果一般通过山体阴影实现,采用 WGS84 经纬度地理坐标系时需要注意 z 因子使用 0.0001 来避免全域都被显示成黑色。
2.3 LINUX 系统学习
创建用户
# 创建用户
sudo useradd -m tongjiaxing
sudo passwd tongjiaxing # baidu@1476
远程连接报错
目前该问题仍未解决;
ssh_exchange_identification: read: Connection reset by peer
# 1. IP 被拦截登录了;
# 2. /var 目录权限过大,导致ssh失败;
QGIS 找不到 proj.db
QGIS-LTR 版本,需要在 mac 系统中,打开 python,输入如下命令:
import os
os.environ["PROJ_LIB"]="/Applications/QGIS-LTR.app/Contents/Resources/proj"
LINUX 下载文件
wget -P data-2 http://10.12.206.61:8080/110000_rendersub_bidb_gcj02___1666854637_Awi0A0fh_bidb_1666855180_et9ksehT.db
wget -P keep http://10.25.70.189:8012/output/bidb2renderdb.tar.gz
10.162.120.18:8012
python -m SimpleHTTPServer 8012
自定义回收站
回收站语法规则定义:
mkdir -p ~/.Trash
cat >>~/.bashrc<<EOF
#add by caimengzhi at $(date +%F) for Linux trash start
alias rm=trash
alias rl='ls ~/.Trash'
alias ur=undelfile
undelfile()
{
mv -i ~/.Trash/\$@ ./
}
trash()
{
mv \$@ ~/.Trash/
}
cleartrash()
{
read "confirm?Clear trash?[n]" confirm
[$confirm = 'y' -o $confirm = 'Y'] && /usr/bin/rm -rf ~/.Trash/*
}
#add by caimengzhi at $(date +%F) for Linux trash end
EOF
source ~/.bashrc
使用:
rm <filedirctory> # 删除文件夹
rm file.txt # 删除文件
ur file.txt # 撤销对 file.txt 的删除
ur <filedirctory> # 撤销对文件夹的删除
rl # 列出回收站
cleartrash # 清空回收站
2.4 高精地图学习
文章链接
九章智驾. 如何实现“轻高精地图”的城市NOH?毫末自动驾驶的8大亮点[EB/OL].
车右智能. 毫末智行的感知架构在演进中——Transformer在毫末的应用[EB/OL].
焉知新能源汽车. 我们研究了特斯拉、毫末「自动驾驶算法」的秘密[EB/OL].
GPS 的 RTK 芯片 + IMU 惯性导航硬件,激光雷达或视觉 SLAM 进行自动驾驶导航定位。
2.5 C++ 日常积累
vector 去重
在依赖类型”XXXX::XX”前缺少typename关键字
这个问题产生原因是编译器不能识别”XXXX::XX”是个啥,这到底是个类型呢,还是类得静态成员变量呢?
解决方法也很简单就是在”XXXX::XX”前面加上typename,告诉编译器这是个类型。
#include<bits/stdc++.h>
using namespace std;
struct De{
int a;
int b;
bool operator==(const De& b) const{
return this->a == b.a && this->b == b.b;
}
bool operator<(const De& b) const{
if(this->a == b.a){return this->b < b.b;}
else {return this->a < b.a;}
}
};
// 去重
template<typename T>
bool make_unique(std::vector<T>& vec){
typename std::vector<T>::iterator it;
std::sort(vec.begin(), vec.end());
it = std::unique(vec.begin(), vec.end());
vec.erase(it, vec.end());
return true;
}
int main(){
vector <De> vec = { {1, 1}, {2, 2}, {3, 2}, {3 ,2}, {4, 2}, {5, 2}, {6, 3}, {3, 1}, {3, 2}, {2, 2}, {1, 1}};
make_unique(vec);
for(auto e : vec){
printf("{%d, %d } ",e.a, e.b);
}
}
GIT 切换到远程分支
git checkout -b ${本地分支名} origin/${远程分支名}
GIT 项目迭代概述
# 项目相关
git clone -b ${指定分支} ${远程仓库} # 1. 下载远程指定分支代码
git checkout -b dev # 2. 新建本地开发分支
git push --set-upstream origin dev # 3. 将本地分支推送到远程仓库
git add .
git commit -m "[1026] xxxx" # 4. 推送更改
# 常用命令
git log # 查看分支的以前的提交记录
git status # 当前状态
git branch -a # 查看所有分支
git checkout -f master # 忽略本地修改并切换到 master 分支
路口面高程在某一值域范围内时拍到 0,高程无明显异常。
参考文献
CSDN 博客. opencv+GDAL 遥感影像滤波[EB/OL].
CSDN 博客.Mac上pip安装包很慢?告诉你方法[EB/OL].
CSDN 博客.ssh_exchange_identification: read: Connection reset by peer[EB/OL].
知乎. 为什么opencv的中值滤波那么快?[EB/OL].
CSDN 博客.OpenCV 图像上采样和降采样[EB/OL].
CSDN 博客.opencv高斯滤波GaussianBlur()详解(sigma取值)[EB/OL].
CSDN 博客. git恢复commit过的代码[EB/OL].
AI 研习社. 【AI PC端算法优化】五,常量阶最大值最小值滤波算法[EB/OL].
飞浆 AI Studio. OpenCV高斯滤波GaussianBlur[EB/OL].
open.gis.lab. 3D DEM Visualization In QGIS 3.0[EB/OL].
CSDN 博客.项目开发git的基本使用流程[EB/OL].
Nhooo. Linux回收站机制实现过程及用法详解[EB/OL].
TODO
下周末串讲
北京数据还是中断了。。