- 博客(48)
- 收藏
- 关注
原创 图像几何变换(仿射变换和透视变换...)及python-opencv实现
至此,已经知道了仿射变换和透视变换的变换矩阵,那在实际应用时该如何求呢?一个方法是直接根据几何参数计算变换矩阵,另外一个方法是通过原始图像坐标和目标图像坐标求解变换矩阵。如下所示为透视变换矩阵的8个方程组。透视变换的矩阵表示如下,我们可以看到它与仿射变换的区别便是最后一行的参数c1和c2的值,对于仿射变换c1=c2=0。透视变换和仿射变换的一个重要区别是:两条平行的线在经过仿射变换之后依然保持平行,但透视变换并不保证这一点。通过透视变换的变换矩阵计算新的坐标,其中a33=1,x’和y’为最终计算的结果。
2024-03-22 18:06:11 707
原创 图像分割之k-means聚类分割
k-means聚类是一种无监督学习的聚类算法,它的目的是将数据集中的样本划分成若干个类别,使得同一类别内的样本相似度高,而不同类别之间的样本相似度低。X 的行对应于点,列对应于变量。第五步,比较新的质心和老的质心,如果新质心和老质心之间的距离小于某一个阈值,则表示重新计算的质心位置变化不大,收敛稳定,则认为聚类已经达到了期望的结果,算法终止。通过计算相似度(默认欧氏距离),将相似度大的样本聚集到同一个类别,k表示聚成k个类别,means表示每个类别的聚类中心点是通过簇中所有样本点的均值得到。
2024-03-15 15:05:34 634
原创 CT图像伪影MATLAB仿真
在去金属伪影过程中,为了研究金属伪影的去除方法,需要获取相应的图像。对此,本文采用了MATLAB对该过程进行仿真。获取投影图像,并对金属区域采用如下变换函数,即可得到目标图像。最终的图像如下所示,可以看到金属周围的明暗条纹。如果觉得本文对你有帮助,欢迎一键三连。不进行变换的情况下,直接进行反投影,如有错误,敬请指正!
2024-03-08 17:15:26 238
原创 C++指针的使用及注意事项
我们常说的指针是一个变量,为复合类型(包括数组、字符串、结构等),指针变量实质是指存储了一个内存地址。而变量会有自己的内存空间,所以虽然指针变量代表着另外一个内存地址,但其自身也会有对应的内存空间存储值,从而导致双重指针或多重指针的存在(多级间接寻址)。在计算机中每个变量都有自己的内存位置,并定义了使用地址运算符(&)可以取用的内存地址。即如果var是一个变量,则&var代表它的地址。总之,指针和内存管理是C++编程中非常重要的一部分,需要程序员对其有深入的理解和掌握。
2024-02-21 18:33:41 968
原创 C++/C函数指针及函数指针数组
首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址。其中,ret为返回值,*p作为一个整体,代表的是指向该函数的指针,args为形参列表。其中p被称为函数指针变量。关于函数指针的初始化与数组类似,在数组中,数组名即代表着该数组的首地址,函数也是一样,函数名即是该数组的入口地址,因此,函数名就是该函数的函数指针。函数指针变量 = 函数名;//例子return a+b;
2024-02-21 11:06:46 903
原创 C++/Python/MATLAB检查内存使用情况
有时为了对电脑、服务器做运行情况监控,需要获取内存、cpu的使用情况。当处理CT图像数据的时候,由于需要内存较大,因此容易出现内存不足的问题,对此,在处理数据之前预先检查剩余内存是否充足很有必要。以下分别是三种编程语言下的内存检查代码。
2024-02-18 14:45:09 371
原创 C++实现图像金字塔下采样和上采样
这不难理解,进行upsample后,图像像素值为0的像素在滤波后其值要和原图一样,该像素的四邻域权重之和应该在0.9左右,其余0.1的部分由其它像素贡献。图像金字塔是对图像的一种多尺度表达,将各个尺度的图像按照分辨率从小到大,依次从上到下排列,就会形成类似金字塔的结构,因此称为图像金字塔。最近在写图像上采样和下采样的C++算法,下采样实现比较容易实现,使用大小5x5和方差为1的高斯滤波核即可得到想要的效果。(2)图像金字塔的下采样之前会对图像进行模糊,上采样后也会进行模糊;
2024-01-31 17:03:51 1010
原创 ITK编译及安装
DICOM图像的读取问题相比于VTK类库中vtkDICOMImageReader类读取DICOM序列图像,借助ITK类库实现对DICOM序列图像的读取要复杂许多。但是,使用ITK类库读取图像不像使用VTK类库那么功能局限,VTK类库对每种图像格式都有着专门的读写类,像vtkDICOMImage-Reader类只能读取普通的DICOM图像,对于压缩后的DICOM图像则只能通过ITK类库来实现读取。
2024-01-24 17:45:25 804
原创 Qt+Vs踩坑之QString转std::string中文乱码
Qt中字符串存在两种中文乱码的情况:1.Qt内部的编码造成的中文乱码;2.QString与std::string之间转换造成的中文乱码。在无中文的情况下,使用以下方式转换是没问题的。(1)QString 转换成 char *(2)char * 转换成 QString。(3)QString转string。
2023-12-22 08:31:51 683
原创 CUDA规约求和/最大值
即得到最后结果。如下图所示:值得注意的是,最后的多个规约结果可以拷贝到CPU中计算,也可以在GPU进行计算。在GPU中进行计算时,当规约结果数量小于单个线程块的线程数时,即可得到最终结果。
2023-12-07 15:22:12 1048
原创 C++实现快速高斯滤波
二维方式是根据kernel的大小以及sigma大小生成一个 size*size的卷积核,然后再做卷积。计算量是imgWidth * imgHeight * size * size,但如果用两个一维来替代,则计算量是imgWidth * imgHeight * size * 2,计算量大大减少。看这篇文章的道友想必对高斯滤波已经很熟悉,在此就不进行赘述了,也可以看看参考资料的文章回顾一下。此处的数据类型ImagePro可以根据自己的需求进行定义。
2023-11-28 17:51:55 461
原创 BM3D降噪算法实现
BM3D(Block-matching and 3D filtering,3维块匹配滤波)降噪是芬兰的坦佩雷理工大学(Pampere University of Technology)的Kosadin、Alessandro、Vladimir、Karen等人2007年提出的基于传统方法的图像降噪算法,该方法的去噪性能目前是非AI图像降噪中去噪效果最好的,无愧于state-of-art denoising performance的称号。
2023-11-20 18:21:53 454
原创 MATLAB常用函数
若参量中不包括任何参数,则默认填充为零且方向为'both'。padval: 'symmetric'表示图像大小通过围绕边界进行镜像反射来扩展;'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。'both'表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。direction : 'pre'表示在每一维的第一个元素前填充;若参量中不包括direction,则默认值为'both'。'post'表示在每一维的最后一个元素后填充;:将double转char。
2023-11-16 08:53:44 70
原创 Qt常见问题记录
头文件中输入#include 后,显示" ‘QTcpSocket’ file not found"。类似的处理还有QChart,对应添加的QT += charts。
2023-11-14 14:23:20 55
原创 Qt控件样式设置
Qt Qwidget 中在进行GUI开发中经常需要对控件进行美化,此时就需要对控件的样式进行修改;1. 在C++代码中通过函数setStyleSheet();2. 在设计师中进行美化;3. 引入QSS文件进行美化;当然,并不拘泥于其中一种方法,有时候会结合三种方法一起使用,但是一般推荐使用QSS文件,或者在设计师中进行美化,代码中尽量少涉及样式美化的工作。
2023-11-09 16:51:04 111
原创 网络编程下的socket编程(TCP\UDP)
UDP不像TCP需要建立永久联系并进行监听,因此客户端和服务端的实现基本都是一样的。其中,服务端需要绑定固定的端口,方便客户端进行连接发送信息。而绑定端口对于客户端是一个可选项, 可以根据自己的需要进行设置。TCP的socket编程的。TCP的socket编程的。UDP的socket编程的。UDP的socket编程的。
2023-11-01 10:20:06 50
算法工程师-C++和数学基础知识
2023-04-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人