- 博客(66)
- 收藏
- 关注
原创 从源代码到可执行文件
写在前面:近期因为项目需要,整理了有关代码编译过程、静态库与动态库以及CMake的相关内容。由于汇报PPT中文字较多,基本上可以解释清楚上述三部分内容以及他们之间所存在的逻辑关系,因此直接将PPT贴在博客中,如有问题欢迎评论区讨论。...
2021-11-18 09:09:22 568
原创 Android Bug: Could not install Gradle distribution from
Android Studio Arctic Fox 在配置新工程时遇到Could not install Gradle distribution from:…的问题。网上的大多数博客讲的都是老版Android Studio中出现这个问题的解决办法,但不适用于新版Android Studio了。新版解决方案如下:(1) 点击错误信息中的链接:1 https://services.gradle.org/distributions/gradle-6.7.1-bin.zip下载ZIP文件到指定路径,并解压。
2021-09-13 16:54:13 839
原创 FFmpeg批处理PNG转YUV
编写.bat文件,文件内容::PNG to YUVfor /L %%a in (1,1,5) do (ffmpeg -i ParkScene_1920x1080_240_%%a.png -s 1920x1080 -pix_fmt yuv420p ParkScene_1920x1080_240_%%a.yuv)cmd
2021-04-21 10:05:58 1455
原创 Loaded runtime CuDNN library: 7605 (compatibility version 7600) but source was compiled with 7003
问题原因:当前环境的cudnn版本(v7.6)与代码编写的cudnn版本(v7.0)不匹配。解决办法:安装cudnn v7.0。在使用anaconda安装cudnn时,发现国内镜像网站中都没有cudnn的7.0版本,可能是因为7.0版本实在太老了。其实可以直接从官网下载cudnn v7.0的库,然后手动替换到当前的anaconda环境中,具体步骤如下:1、在Nvidia的官网下载cudnn v7.0;2、解压cudnn v7.0压缩包,将文件夹中的bin、lib以及include文件夹复制到anac
2021-04-15 11:17:39 1232 3
原创 找不到‘_pywrap_tensorflow_internal‘模块
原因:TensorFlow版本太高了,与代码不匹配。解决方法:安装版本低于tensorflow1.7.1的版本。
2021-04-12 09:49:16 798
原创 解决问题:ModuleNotFoundError: No module named ‘__main__.XX‘; ‘__main__‘ is not a package
同一个项目里面,导入自己写的模块时,出现“ModuleNotFoundError: No module named ‘main.XX’; ‘main’ is not a package”问题。 这是因为import时使用了相对路径导致的,把相对路径改为绝对路径可以解决这个问题。这个问题可能与pycharm版本有关。...
2021-04-09 15:09:32 2880
原创 理解垂直同步
首先,垂直同步信号是显示器在每显示完一帧发送的信号,要理解垂直同步的作用首先要清楚显示器刷新率与显卡渲染帧率之间的关系。显示器的刷新率:也就是显示器每秒钟显示的画面(帧)的数量,比如60Hz就是每秒显示60帧,这个值是显示器固有的,不能自由调节(有的显示器有几档可调)。而显卡渲染帧率:在这里指的是显卡在每秒钟里面能渲染出多少帧的画面。这个值基本上就是游戏里显示出来的FPS值。根据游戏的画面设置,是一个浮动值。也就是说,显示器的刷新率代表了显示器从帧缓存中读取数据的速度,显卡的渲染帧率代表了显卡向帧缓存
2021-04-02 17:37:04 1755
原创 线性颜色空间与伽马颜色空间
一、什么是线性颜色空间和伽马颜色空间? 线性颜色空间是指与显示亮度值之间呈线性关系的像素值空间。 伽马(Gamma)颜色空间是指线性颜色空间中的像素值经过伽马校正得到的颜色空间。 之所以使用伽马颜色空间是由于早期CRT显示器的输入电压与显示亮度值之间呈一种非线性关系,如图1所示,这个非线性关系曲线近似为指数函数曲线,这个指数称为Gamma。
2021-03-29 22:51:07 4160
原创 PyTorch入门——使用GPU并行处理数据
使用PyTorch我们可以方便的将数据及神经网络传递到GPU,使用GPU来加速网络训练。1、关键函数:# 将运行设备设置为GPUdevice = torch.device("cuda:0")# 将神经网络传递给GPUmodel.to(device)# 将Tensor数据传递给GPUmytensor = my_tensor.to(device)# 设置并行处理数据model = nn.DataParallel(model)2、使用G
2021-01-07 21:43:03 1415 2
原创 PyTorch入门——训练图像分类器
本文将使用PyTorch搭建神经网络,训练一个简单的图像分类器,主要分为以下步骤:1. 使用torchvision对CIFAR10训练和测试数据集进行加载和归一化import torchimport torchvisionimport torchvision.transforms as transforms####################################################################
2021-01-07 21:27:12 448
原创 PyTorch入门——搭建神经网络
使用PyTorch搭建并训练神经网络主要分为以下五个步骤:1. 定义神经网络; 使用PyTorch只需要定义神经网络的正向传输过程,Autograd机制会自动生成反向传播过程。torch.nn包提供了创建神经网络的卷积层、全连接层等的函数,使用这些函数可以方便的搭建想要的网络。代码示例:import torchimport torch.nn as nnimport torch.nn.fu
2021-01-07 21:15:09 351
原创 PyTorch入门——Autograd
一、什么是Autograd Autograd是PyTorch中所有神经网络的核心,它提供自动计算张量梯度的方法。使用Autograd我们在搭建神经网络是只需要定义正向传播过程,PyTorch会自动生成反向传播过程的计算公式。二、如何使用Autograd Tensor是Autograd的核心类,我们在使用时要把需要自动计算梯度的Tensor的requires_grad设为True,把不需要计算梯度
2021-01-07 20:49:04 1120
原创 PyTorch入门——什么是Pytorch?
一、什么是Pytorch Pytorch是以一个基于Python的科学计算包,其目标有两个:替代Numpy使用GPU来处理数据;提供最大灵活性和速度的深度学习研究平台。二、如何使用Pytorch处理数据 Pytorch以Tensor(张量)来组织数据,张量类似于数组,不同的是张量可以使用GPU来加速计算。 下面从五个方面介绍Tens
2021-01-07 20:06:30 1094
原创 OpenCV:拉普拉斯金字塔+Gabor方向滤波器原理及实现
一、拉普拉斯金字塔1.1 原理 拉普拉斯金字塔将图像分解为低频分量和多个不同尺度的高频带通分量。使用拉普拉斯金字塔可以提取到图像不同尺度的空间频率特征。 拉普拉斯金字塔滤波器组首先将图像下采样,从而获取该尺度的低频分量。然后,将下采样后的图像插值进行上采样,将插值后的图像与原图像做差,得到的便是原图像尺度下的高频残差,也就是高频分量。对于低频分量不断地迭代这一过程,从而得到不同尺度的高频分量(
2020-12-23 19:57:26 3690 3
原创 VS调试踩坑记录:VS LINK : fatal error LNK1104: 无法打开文件“shell32.lib”
在为VS2017配置OpenCV时,遇到了“LINK : fatal error LNK1104: 无法打开文件‘shell32.lib’”的问题。一、确认shell32.lib存在 首先,确认使用的Windows SDK 10.0.18362.0中,x64文件夹中存在shell32.lib文件;查看VS使用的Windows SDK版本的方法: &
2020-12-23 17:15:57 4969 3
原创 特征提取——灰度共生矩阵(GLCM)
一、 定义 由于灰度图的纹理是由不同灰度值在空间位置上以某种模式反复出现而形成的,因而在图像空间中相隔某距离的两像素之间会存在一定的灰度关系,即图像中灰度值存在空间相关性。灰度共生矩阵正是利用这一原理,通过计算图像灰度的空间相关性来描述纹理特征。灰度共生矩阵是图像不同灰度值在特定角度、特定距离上之间的相关性函数,反映了图像纹理的二维统计特征。二、 构建灰度共生矩阵 灰度共生矩阵是一个N*N的方
2020-12-16 20:22:39 6862
原创 FCM-模糊C均值聚类算法简介及C++实现代码
模糊C均值聚类(FCM)算法是基于模糊理论的一种软聚类算法。相对于K-Means算法的硬聚类,FCM提供了更加灵活的聚类结果。在很多情况下,数据集中的对象不能划分成为明显分离的簇,这时使用K-Means为每一个对象指定一个特定的簇,就可能出现问题。FCM定义了隶属度的概念,用于衡量某个对象对各个簇的隶属程度。因此,在模糊的数据集中使用FCM算法可以得到更好的结果。一、算法流程图:二、关键步骤的计算聚类损失函数: &
2020-12-03 17:24:55 3977
原创 ITK/VTK:绘制二维及三维DICOM图像分布直方图(附源码)
使用ITK及VTK读取DICOM图像序列,并绘制图像统计直方图。 注意事项及实现思路: 1. 必须使用ITK读取DCM序列,使用VTK读取数据会产生失真,详见使用VTK和Matlab读取DICOM图像数据失真问题; 2. 使用ITK读取数据后,将统计结果存入一维数组中,使用VTK的vt
2020-12-02 20:02:22 2021 2
原创 使用VTK和Matlab读取DICOM图像数据失真问题
最近在处理DICOM数据时,发现使用VTK的vtkDICOMImageReader类以及使用Matlab的dicomread函数读取到的Dicom图像存在像素值失真的问题,即使用上述两种方式读取到的图像像素值与使用RadiAnt DICOM Viewer、MicroDicom等软件中显示的亮度值不同。 经过对比发现,使用上述两种方式都将图像的像素值范围进行了压缩,但并不是等比例的缩放,所以很难从压
2020-12-01 15:32:58 1304 3
原创 VS调试踩坑记录:VS “error LNK2019: 无法解析的外部符号 ......”
一、解决方案 在使用VS生成解决方案时,报错 “error LNK2019: 无法解析的外部符号 …”,一般是因为找不到需要的.lib静态库导致的。这种情况下通过以下两个步骤解决问题: 1、通过【属性管理器】 > 【VC++目录】 > 【库目录】,添加所需lib文件所在的文件夹路径; 2、【属性管理器】 > 【通用属性】 &
2020-11-25 19:43:57 20252 4
原创 H.265/HEVC学习笔记:量化
量化是指将信号的连续取值(或者大量可能的离散取值)映射为有限多个离散幅值的过程,实现信号取值多对一的映射。在视频编码中,残差信号经过DCT后,变换系数往往具有较大的动态范围。因此对变换系数进行量化可以有效的减小信号的取值空间,进而获得更好的压缩效果。同时,由于多对一的映射机制,量化过程不可避免地会引入失真,它也是视频编码中产生失真的根本原因。 一个量化器可由其输入端的范围划分方式以及对应的输出值
2020-11-24 22:40:11 2984
原创 H.265/HEVC学习笔记:变换
一、 原理 图像变换编码是指将以空间域中像素形式描述的图像转换至变换域(频域),以变换系数的形式加以表示。由于绝大多数图像都含有较多平坦区域和内容变化缓慢的区域,适当的变换可使图像能量在空间域的分散分布转换为在变换域的相对集中分布,以达到去除空间冗余的目的。 在H.265/HEVC中,对经过预测编码后的预测残差进行变换,并根据预测残差的特点使用离散余弦变换和离散正弦变换两种变换方式。二、离散余
2020-11-22 21:04:25 1376 1
原创 H.265/HEVC学习笔记:帧间预测编码
一、 原理 帧间预测是指利用视频时间域的相关性,使用邻近已编码图像像素预测当前图像的像素,以达到去除视频时域冗余信息的目的。由于视频序列通常包括较强的时域相关性,因此预测残差通常是“平坦的”,即很多残差值接近于“0”。将残差信号作为后续模块的输入进行变换、量化及熵编码,可实现对视频信号的高效压缩。 目前主要的视频编码标准帧间预测部分都采用了基于块的运动补偿技术,如图4.7所示。其主要原理是为当前图
2020-11-21 10:58:00 4093
原创 H.265/HEVC学习笔记:帧内预测编码
帧内预测编码是指利用视频空间域的相关性,使用当前图像已编码的像素预测当前像素,然后将预测残差(当前像素真实值与预测值之间的差值)作为后续编码模块的输入,进行下一步编码处理。在解码端解码时使用同样的方式计算出当前像素的预测值,结合从码流中得到的预测残差重建出真实的像素值。帧内预测技术是消除视频空间冗余的主要技术之一。一、帧内预测模式1、亮度帧内预测模式 H.265/HEVC亮度分量的帧内预测支
2020-11-18 21:14:44 2714
原创 ITK图像itk::Image指针参数传递失败
最近,在使用ITK进行医学影像处理时,遇到了itk::Image<PixelType, Dimension>类型的指针作为参数传递失败的问题,问题详情及解决方案如下。错误代码如下: using ImageType = itk::Image<PixelType, Dimension>; ImageType* fun(ImageType* image){ ....... } //函数调用时 ImageType*
2020-11-18 15:06:15 548
原创 使用ITK读写DICOM序列
版本:ITK 5.1.1关键类:itk::ImageSeriesReader 用于读取图像序列;itk::ImageSeriesWriter 用于写入图像序列;itk::GDCMSeriesFileNames 用于读取序列文件名;itk::NumericSeriesFileNames 支持按照特定格
2020-11-18 11:04:00 2612 5
原创 ITK(InsightToolkit)简介
一、ITK简介 ITK是The Insight Segmentation and Registration Toolkit的简称,它是在美国国家图书馆的资助下开发的用来分析The Visible Human Project中图像算法的开源项目。这个Toolkit提供在了1D、2D、3D图像分析中最前沿的分割与配准算法,主要用于医学影像处理。 ITK是开源并且跨平台的,使用CMake管理配置过程,它
2020-11-17 17:03:13 3981
原创 批处理-批量修改文件扩展名
//跳转到指定文件夹cd /d D:/test //将所有文件扩展名修改为.txtren * *.txt//将所有.txt文件的扩展名修改为.cppren *.txt *.cpp
2020-11-17 15:55:37 538
原创 dicom图像处理:使用Matlab裁剪并输出选定区域的CT图像
1、主要函数简介:dicomread(filepath):matlab自带的读取dicom文件的库函数,filepath是待读取文件的路径;dicomwrite(image,filepath):matlab自带的dicom写入函数,image是存储图像像素值的二维矩阵,filepath是待写入文件的路径;dicominfo(filepath):matlab自带的读取指定路径dicom文件头信息的函数;imrect:创建可变形矩形,在已显示的图像中选中矩形区域,双击左键确认;wa
2020-10-25 11:18:37 2391 3
原创 VTK 9.0.1安装并将VTK导入自建工程
一、VTK 9.0.1的安装1、使用CMake生成VTK.sln 首先,目前VTK-9.0.1版本还没有下载VTK-9.0.1.tar.gz、VTKData-9.0.1.tar.gz和VTKLargeData-9.0.1.tar.gz。下载点我! 下载完成后,需要解析.gz文件和.tar文件,我使用的是解压软件7z,解压两次就好了。 解压完成后,打开CMake,将Source Code的路径设置
2020-10-21 21:34:23 2862 5
原创 DICOM三维重建:基于VTK实现三种面绘制算法
版本:VS2019、VTK9.0.1#define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2)#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2)#include "vtkDICOMImageReader.h"#include "vtkRenderWindowInteractor.h"#i
2020-10-21 17:34:32 5340 23
原创 CMake修改Current Generator
CMake选错Generator修改的方法:1、点击 File > DeleteCache;2、点击Configure按钮。注意:Generator选择VS2017时,解决方案平台默认设置为Win32,需要手动修改为x64。
2020-10-21 15:55:58 4607 5
原创 DICOM图像的三维重建算法——面绘制算法和体绘制算法
对医学影像进行三维重建最常用的算法有两类:一类是基于构建物体表面的面绘制算法;一类是直接绘制物体三维体素的体绘制算法。本文通过两种最常用的算法,总结面绘制和体绘制的基本思想。1、 基于面绘制的Marching Cubes算法 面绘制算法的基本原理:在医学影像中,物体的表面实际上是一个闭合的灰度等值面,其灰度值称为阀值,在该等值面内部,所有体素的灰度值都大于这个阀值,在等值面外部,所有体素的灰度值
2020-10-21 15:20:03 12422
原创 windows编译VTK的INSTALL时 error MSB3073: 命令“setlocal.... “
这是因为在cmake的时候指定的安装目录是C盘,需要管理员权限,所以有两种解决方法:以管理员权限打开VS,打开VTK.sln,重新编译INSTALL项目。在cmake时选择安装在其他盘。...
2020-10-21 08:29:06 1417
原创 VTK设置Actor颜色无效的问题
在使用VTK重建三维模型时,直接设置Actor的颜色无效,模型颜色一直是蓝色。my_actor->GetProperty()->SetDiffuseColor(1.0, 1.0, 1.0); 需要关闭Mapper的ScalarVisibility,颜色设置才能生效,ScalarVisibility模式的含义是用标量来决定Mapper的颜色。my_Mapper->Scalar
2020-10-20 21:16:19 1980
原创 Unity在脚本中创建Material性能过慢的问题
最近,在Hololens中实现本地读取模型文件,从脚本中创建模型的对象、材质以及网格。发现在Hololens中创建网格的时延特别长,经过调试发现主要是有两个原因造成: 一方面,原因是模型顶点过多,有近百万个顶点,但这并没有达到Hololens 2的性能极限,因此这并不是主要原因; 另一方面,是因为在代码中为模型的材质创建了MeshCollid
2020-10-16 19:31:55 702
原创 DCM(DICOM)医学影像文件格式详解
1、 什么是DICOM? DICOM(DigitalImaging andCommunications inMedicine)是指医疗数字影像传输协定,是用于医学影像处理、储存、打印、传输的一组通用的标准协定。它包含了文件格式的定义以及网络通信协议。DICOM是以TCP/IP为基础的应用协定,并以TCP/IP联系各个系统。两个能接受DICOM格式的医疗仪器间,可通过DICOM格式的文件,来接收与交换影像及病人资料。 &nbs
2020-10-14 22:23:28 41071 3
原创 Unity 一个MeshRenderer下添加多个Material并在脚本中使用
Unity的MeshRenderer提供了Materials数组,支持同时挂多种材质。这样做的目的是,为含有Mesh对象的多个SubMesh使用不同的材质,渲染不同的效果。 需要添加多个Material直接在对象的Inspector窗口修改Materials的Size,然后把待添加的材质拖入Element选项框即可。 在脚本中获取Mater
2020-10-14 16:38:43 5095
原创 Hololens开发笔记:关闭性能分析条
显示性能分析条是因为打开了MRTK的Diagnostics System(诊断系统)。诊断系统有助于调试程序时进行性能分析,在生成正式程序时应关闭诊断系统。 关闭诊断系统的方法如下图所示: 关闭诊断系统取消勾选Enable Diagnostics System即可;如果只是调试时关闭性能分析条的显示只需要取消勾选ShowDiagnostic
2020-10-13 19:53:37 886
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人