CSDN创作者4周年,感谢平台,未来可期!
- 不知不觉已经加入这个平台4周年了,恍惚昨日之景,有些事情,你不在意,平台却已经写好了程序来给它画上了标记,思想无线,故程序也无边界
- 坦白讲,虽说四周年,但感觉自己真正 在这个平台创作内容是从2021年下半年起,为什呢这么说呢,是因为从那时真正有了对算法和程序的思考能力。
- https://blog.csdn.net/yohnyang?spm=1010.2135.3001.5343
机缘
- 通过blog进行基础知识的积累和巩固
- 实战项目中的经验分享
- 日常学习过程中的记录
- 通过文章进行技术交流
- 知识付费,技术变现
- 尝试通过这个平台可以拓展更多的人脉,接触新的关于视觉算法相关的项目,不断突破和挑战
收获
-
涨粉
-
总体等级提升
-
资源下载
-
变现
日常
- 创作是否已经是生活的一部分了,每天早上会打开手机CSDN查看一下数据变化,工作日都会通过CSDN查询相关的技术盲区,阶段性的自我计数审查,如果有了新的心得和总结总是会迫不及待的将它变为blog,已经视为必须的一部分。
- 有限的精力下,如何平衡创作和工作学习:时间弥足珍贵,二十多岁,生活压力普遍较大,贯穿着技术薄弱、工作经验少、人脉稀疏,加班时间较长,可能留给创作和学习的时间很少,但是慢慢工作时间长了会发现,做一个项目或者开发一个功能的时候,如果信手拈来,那增加的就是惊讶积累,如果颇具挑战,那每天都将收获一些新的知识和体会,相当于每天都在学习,我觉得创作可以从闲暇之余挤出一些时间书写博客,一次写或者分几次完成也都可以0
成就
- 工作两年多,自己也动手做过一些小项目,这些在我的
人工智能专栏就可以看到,主要介绍的是一些视觉算法应用(传统+deeplearning) - 有一个成就时最值得骄傲的,2022年研究了一个C++的机器人库并记录在了机器人控制算法专栏,这个在全网是独一份而且最详细的,个人感觉他要比
ROS
要好用一些。 - 总结的深度学习实战例程目前篇数少却订阅量很好,这个很自豪,以后也会再接再厉,续上更多的项目案例呈现给我的粉丝及订阅者们,感谢一路陪伴。
- 放一个感觉
自己刚站起来
的代码,在我的立体视觉与三维重建专栏可以看到详细介绍:https://blog.csdn.net/yohnyang/article/details/124490587
clear all;
close all;
clc;
%生成原始点集
X=[];Y=[];Z=[];
for i=-180:2:180
for j=-90:2:90
x = i * pi / 180.0;
y = j * pi / 180.0;
X =[X,cos(y) * cos(x)];
Y =[Y,sin(y) * cos(x)];
Z =[Z,sin(x)];
end
end
P=[X(1:3000)' Y(1:3000)' Z(1:3000)'];
%生成变换后点集
i=0.5;j=0.3;k=0.7;
Rx=[1 0 0;0 cos(i) -sin(i); 0 sin(i) cos(i)];
Ry=[cos(j) 0 sin(j);0 1 0;-sin(j) 0 cos(j)];
Rz=[cos(k) -sin(k) 0;sin(k) cos(k) 0;0 0 1];
R=Rx*Ry*Rz;
X=P*R + [0.2,0.3,0.4];
plot3(P(:,1),P(:,2),P(:,3),'b.');
hold on;
plot3(X(:,1),X(:,2),X(:,3),'r.');
%计算点集均值
up = mean(P);
ux = mean(X);
% %case1:矩阵右乘
% P1=P-up;
% X1=X-ux;
%
% % 计算点集协方差
% sigma=P1'*X1/(length(X1))
%
% [u s v] = svd(sigma);
% RR=u*v';
%
% % 计算平移向量
% qr=ux-up*RR;
%
% %验证旋转矩阵与平移向量正确性
% Pre = P*RR+qr;
%case2:矩阵左乘
PP=P';
XX=X';
PP1=PP-up';
XX1=XX-ux';
%sigma
sigma=XX1*PP1'/length(XX1);
[u s v]=svd(sigma);
RR=u*v';
qr=ux'-RR*(up');
Pre = RR*PP+qr;
Pre=Pre';
figure;
plot3(P(:,1),P(:,2),P(:,3),'b.');
hold on;
plot3(X(:,1),X(:,2),X(:,3),'r.');
plot3(Pre(:,1),Pre(:,2),Pre(:,3),'go');
C++ - Eigen 实现:
void pose_estimation_3d3d(const vector<Point3f> &pts1,
const vector<Point3f> &pts2,
Mat &R, Mat &t) {
Point3f p1, p2; // center of mass
int N = pts1.size();
//求质心
for (int i = 0; i < N; i++) {
p1 += pts1[i];
p2 += pts2[i];
}
p1 = Point3f(Vec3f(p1) / N);
p2 = Point3f(Vec3f(p2) / N);
//去质心
vector<Point3f> q1(N), q2(N); // remove the center
for (int i = 0; i < N; i++) {
q1[i] = pts1[i] - p1;
q2[i] = pts2[i] - p2;
}
// 计算W
Eigen::Matrix3d W = Eigen::Matrix3d::Zero();
for (int i = 0; i < N; i++) {
W += Eigen::Vector3d(q1[i].x, q1[i].y, q1[i].z) * Eigen::Vector3d(q2[i].x, q2[i].y, q2[i].z).transpose();
}
cout << "W=" << W << endl;
// SVD分解出U V
Eigen::JacobiSVD<Eigen::Matrix3d> svd(W, Eigen::ComputeFullU | Eigen::ComputeFullV);
Eigen::Matrix3d U = svd.matrixU();
Eigen::Matrix3d V = svd.matrixV();
cout << "U=" << U << endl;
cout << "V=" << V << endl;
//计算R T
Eigen::Matrix3d R_ = U * (V.transpose());
if (R_.determinant() < 0) { //R存在多解情况,取正值
R_ = -R_;
}
//求解t
Eigen::Vector3d t_ = Eigen::Vector3d(p1.x, p1.y, p1.z) - R_ * Eigen::Vector3d(p2.x, p2.y, p2.z);
// 变成矩阵形式
R = (Mat_<double>(3, 3) <<
R_(0, 0), R_(0, 1), R_(0, 2),
R_(1, 0), R_(1, 1), R_(1, 2),
R_(2, 0), R_(2, 1), R_(2, 2)
);
t = (Mat_<double>(3, 1) << t_(0, 0), t_(1, 0), t_(2, 0));
}
憧憬
-
职业规划
在此不说太远的事情,先说下三到五年的职业规划吧:当下工作第3年中,希望再过两到三年可以夯实C++实战能力,在多线程、算法及部署上运用自如,并可以在Qt中移植自己的算法,形成一套完整的体系操作,真正的成为技术精英,五年内的话希望可以不仅在技术上有发展,希望以后可以在产品设计、方案制定及团队协作上积累更多的经验,更好的发光发热哦 -
创作规划
- 一方面将现有的专栏补充完善,争取每个实战项目专栏数量在50+
- 另一方面开拓其他专栏项目,比如nlp、机器人控制算法等
- 也希望可以将我积累的经验和知识优化成课程放在CSDN平台上,若干年后保存一些很有意义的回忆吧
致谢
!!!---------- 感谢CSDN提供平台---------- !!!