自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

疏影杏花里

微信公众号【程序员加油站】

  • 博客(123)
  • 资源 (6)
  • 收藏
  • 关注

原创 GPU渲染管线之旅|07 深度处理、模板处理

在这一篇中,我们来讨论Z-pipline的前端部分(简称它为early-Z), 以及它是在光栅化中怎么起作用的。和上一篇一样,本篇也不会按实际的管道顺序进行讨论;我将首先描述基础算法,然后再补充管线中的各个阶段(以相反的顺序可以更简单的解释这些内容)。1.插值Z通过三角形进行插值,因为三角形顶点的属性是由vertex shader输出的。 让我先花点时间解释一下它是如何工作的。 在这一点上,我最初有一节介绍如何推导插值背后的数学运算,以及为何透视插值以这种方式起作用。 我花了几个小时苦苦挣扎,因为我试图

2021-03-17 22:01:35 16

原创 谈谈OpenCV中的四边形

首先抛出一个问题,给定一系列二维平面上的的点,这些点是可以组成一个封闭的二维图形。因为这些点是矩形区域拍摄图像后识别得到的图形的边界点,所以我们要抽象出来这个矩形,也就是我们要反映出这个矩形。问题是在拍照的时候摄像头可能不是正对着图形的,那么矩形就必然在图像上反映为一个四边形, 如下图所示。那怎么得到这个四边形的四个顶点呢?使用经典图像处理的算法的话可以使用OpenCV提供了几个和矩形相关的函数接口。另一类就是使用机器学习类算法检测定位四个角点。首先来看看使用经典图像处理的算法来进行解决。1.最小包络

2021-01-16 14:19:06 72

原创 GPU渲染管线之旅|06 三角形的生成和建立

系列文章原发布在自己搭建的博客上:https://binean.top/欢迎回来。这次我们去看看三角形的光栅化。但在光栅化三角形之前,我们需要执行三角形设置,并且在设置三角形之前,我还要解释一下我们做的准备是为了什么,最后我们来聊聊三角形硬件光栅化算法。1.如何画一个三角形首先,给很熟悉这部分并自己写过软纹理映射的人一点小提示:三角形光栅器一次要处理一堆东西:跟踪三角形的形状,插值出坐标uuu和vvv(对于透视矫正映射,是u/zu/zu/z,v/zv/zv/z和1/z1/z1/z),执行Z缓冲测试.

2020-07-18 10:14:39 116

原创 GPU渲染管线之旅|05 图元处理、Clip/Cull, 投影和视图变换

系列文章原发布在自己搭建的博客上:https://binean.top/上一篇中我们讨论了关于“纹理和采样”,这一篇我们回到3D管线的前端。在执行完顶点着色之后,就可以实际的渲染东西了,对吗?暂时还不行, 因为在我们实际开始光栅化图元之前,仍然还有很多事要做。所以在本篇里我们不会看到任何光栅化内容——还得等到下次再讲。1. 图元装载当我们离开顶点处理流水线时,从着色器单元中得到了一个包含已经着色完成的顶点数据内存块,该内存块中包含一些完整的图元。我们不会让三角形,直线或者补块(pathces)之类.

2020-07-06 20:07:16 125

原创 GPU渲染管线之旅|04 纹理和采样

上一篇讨论了顶点着色器,涵盖了GPU通用着色器处理单元的一些内容。它们都仅仅是向量处理单元, 但是当我们在访问Resource的时候,通常都不是这种向量的形式,所以GPU中还需要另一个专门用来在Pipeline中处理整数的单元:Texture Sampler. 这个单元内部相对比较复杂,复杂(也很有趣)到我们需要用单独的一篇文章来讨论它们。1.纹理阶段在我们开始了解真正的纹理操作之前,让我们先对API阶段的纹理操作有个完整的认识。在D3D11中,这主要由三个部分组成:采样阶段。设置滤波模式,设置寻址

2020-07-05 14:18:00 145

原创 GPU渲染管线之旅|03 图形管线概览及GPU中顶点处理

通过前面几篇的内容,我们知道,应用程序中的Draw API调用会经过D3D Runtime, 用户态驱动等等各个层级,最终将命令传到GPU的命令解释器,GPU就会根据命令的内容来进行图形的计算和处理。那么这一篇我们就来看看顶点的处理流程。1. 开胃菜在介绍GPU的顶点处理之前,我们先看看3D渲染管线。3D渲染管线是由一系列的stage构成的,每个stage都完成一些特定的工作。下图是D3D 1...

2020-05-08 10:08:59 379

原创 GPU渲染管线之旅|02 GPU内存架构和命令处理器

系列文章原发布在自己搭建的博客上:https://binean.top/上一篇中主要介绍了3D渲染命令到达GPU之前经历过的各个阶段。用下图可以概括上一篇中所讲的内容,当然其中很多细节没有出现在图中。之前我们说KMD将命令送给了硬件,这个简单的“送”的过程实际上并不是那么简单的。我们知道显卡都是通过信号线连在主板上的,所以我们送命令都是需要走这些信号线的。还有就是我们把命令送给显卡,那显卡总...

2020-05-04 17:51:21 358

原创 GPU渲染管线之旅|01 从App到硬件各个层级

0. 介绍从App到硬件各个层级 (Introduction: the Software stack)我在这里发布了东西已经有一段时间了,我可能会用这个地方来解释一些关于2011年图形硬件和软件的一般观点。通常你可以找到你电脑中显卡调用栈的相关描述,但是这些调用关系是如何工作?它们又是为什么要这样呢?这些问题就不那么容易找到答案了。我会尽量填补空白,而不会对特定的硬件进行具体的描述。我将主要讨论...

2020-05-04 13:16:48 320 2

原创 Python链家二手房数据分析

from bs4 import BeautifulSoupimport matplotlib.pyplot as pltfrom sklearn.preprocessing import PolynomialFeaturesfrom sklearn.pipeline import make_pipelinefrom sklearn.linear_model import Ridgefro

2019-01-15 23:52:48 1141

原创 C++内存管理(2)—内存操作相关函数

转载请注明出处:https://www.jianshu.com/p/ca51012db547C++内存管理(1)——分配和释放的四个层面 上一篇中从整体上来看系统中四个层面上内存的分配和释放,这样我们就对内存分配有了一个整体的认识。这一节则详细的来写写这四个层面中的操作符或函数的使用方法,以及他们背后的调用关系。首先我们从我们使用最多的new和delete来说起。1. new 和 dele...

2019-01-15 23:49:41 486

原创 C++内存管理(1)—分配和释放的四个层面

转载请注明出处 https://www.jianshu.com/p/8f5e4d215d971. 站在高处思考从一个比较高的角度来看,内存管理说到底就是使用OS提供的API或是使用运行在OS之上的Runtime或者更为上层的SDK对内存进行申请和释放。C/C++中内存管理是个经久不衰的话题,因为C/C++不像其它语言那样拥有自己的GC机制。这也是C/C++为人诟病的地方,特别对于使用C/C...

2019-01-15 23:48:49 748

原创 AI与医学辅助诊断

人工智能一词越来越频繁的出现在日常生活中。一种事物的时髦,必然有其背后的原因。而对于这样一个大的话题,从整体上来叙述总显得有些不接地气。作为跟AI沾过一些边的博主将以自己接触的方面来发表一点看法。 首先介绍一下,博主在研究生期间从事医疗数字影像研究和医疗系统开发,期间跟临床医生也有过一些交流,研究生课题也是智能辅助诊断的研究。因此,文章可能会实际工程使用为主要的着眼点,来表述一下对是否加入AI这一浪

2017-07-22 22:23:18 15194 8

原创 D3D 9和D3D 11绘制流水线对比

绘制流水线(pipline)是图形学编程中属于各种图形学框架的骨架。Windows平台下3D游戏开发几乎都会用到D3D来进行游戏引擎的设计。D3D 9是使用比较广泛的一个版本,D3D 9 中比较核心的就是固定渲染管线(Fixed Function Pipline)。下图是从官方的SDK中翻译的,从这个图中就可以比较清晰的看到D3D 9的绘制流水线。 D3D 9 的绘制流水线 从图中标有颜

2017-07-22 18:51:38 1695

原创 Java网络编程 - 非阻塞IO模型

1. Java NIO简介NIO(Non-Block I/O)是在JDK1.4之后引入的。NIO弥补了同步阻塞I/O的缺点。提供了高速、面向块的I/O。 在NIO库中,所有的数据都是用缓冲区来处理的,在读取数据的时候,他是直接读到缓冲区中的:在写数据时,写到缓冲区中。任何时候访问NIO中的数据都是通过缓冲区进行操作。 Java NIO由三个核心部分组成,Buffers, Channel和Sele

2017-05-22 21:14:32 1335

原创 Java网络编程 - 同步阻塞IO模型

由于项目需要使用Java开发后台服务器程序,C/C++程序员就要学学Java了。Unix/Linux下的几种网络IO模型在之前的博客中已经提及到,但是使用的大多数都是Unix/Linux下的系统调用。 博客内容大多数来自网络资料以及书籍《Netty权威指南》,转载请注明出处,谢谢!如果想了解Unix/Linux下网络IO模型的可以看如下的几篇相关博客,里面大多都是代码段,原理性的讲解比较少。

2017-01-12 16:07:16 2045

原创 OpenCV - 最大熵分割

转载请注明出处,谢谢.图像分割系列的博客连续写了两篇了,这次继续写写利用最大熵模型来进行图像的阈值分割。如果对其他相关博客感兴趣可进入下面的链接查看: 1. OpenCV - 区域生长算法 2. OpenCV - 均值迭代分割 3. OpenCV - 最大间方差(OTUS)分割1. 最大熵是什么?这里所说的熵是指信息熵,信息熵是来自于信息论的一个词,它是对系统所含信息的一种度量。通俗的讲,系

2016-12-29 18:58:31 7495 3

原创 OpenCV - 最大间方差分割

OpenCV中其实有对OTUS算法的实现,threhold()函数最后一个参数可以指定使用OTUS算法。1、最大方差(OTUS)算法的描述和均值迭代算法相似,OTUS算法也是利用图像的直方图进行的。OTUS算法的思想是选取一个阈值T,T∈[0,m−1]T, T \in [0,m-1],mm为图像的灰度级将直方图两部分,TT值使得分成的两组间方差最大。2、算法的步骤待处理图像灰度值范围为[0,m−1

2016-12-06 20:10:19 3009

原创 OpenCV - 均值迭代分割

【题外话】:之前在博客中写过一篇“区域生长”的博客,区域生长在平时经常用到,也比较容易理解和代码实现,所以在很多情况下大家会选择这种方法。但是区域生长有一个最致命的点就是需要选取一个生长的种子点。 为了交流学习,同时也为了后面查阅方便,准备陆续将基于直方图的几种分割算法加以总结。1、均值迭代算法的描述对一幅图像MM,均值迭代算法就是要迭代计算得到一个灰度值TT,使得这个灰度值TT将图像分成的

2016-12-03 23:12:24 3787

原创 Linux服务器上搭建SVN

示例在Linux debian上安装SVN服务软件1. 安装SVN服务软件ubuntu或者debian上可以直接用apt-get,centos上可以使用yum,或者下载安装包都可以,软件名为subversion。sudo apt-get install subversion 安装完成之后可以使用svnserve --help来验证安装是否正常。2. 创建仓库使用create来建立一个仓库svna

2016-11-22 16:04:13 1530

原创 DICOM影像中的窗宽窗位

1. 为什么有窗宽窗位?医学图像领域的关键技术窗技术,是CT检查中用以观察不同密度的正常组织或病变的一种显示技术,包括窗宽(window width)和窗位(window level)。由于各种组织结构或病变具有不同的CT值,因此想要显示某一组织结构细节时,应该选择适合观察该组织或病变的窗宽和窗位,以获得最佳显示。 2. 窗宽窗宽是CT图像上显示的CT值范围,在此CT值范围内的组织和病变均

2016-11-17 19:38:57 8729

转载 STL中的所有算法(70个)

STL算法部分主要由头文件,,组成。要使用 STL中的算法函数必须包含头文件,对于数值算法须包含,中则定义了一些模板类,用来声明函数对象。    STL中算法大致分为四类:        1、非可变序列算法:指不直接修改其所操作的容器内容的算法。        2、可变序列算法:指可以修改它们所操作的容器内容的算法。        3、排序算法:包括对序列进行排序和合并的算法、

2016-11-17 19:10:24 5651 3

原创 STL常用算法

#include 算法常用版本描述返回Typestd::find()find(_InIt _Fisrt,_InIt _Last,_Ty& _Val);从两个迭代器指定的范围中查找指定值引用被查找的值的iterator或end()std::find_if()

2016-11-17 19:04:53 1326

原创 机器学习 - GMM参数估计的EM算法

看理论之前先来【举个例子】: 对于一个未知参数的模型,我们观测他的输出,得到下图这样的直方图:我们先假设它是由两个高斯分布混合叠加而成的,那么我们该怎么去得到这两个高斯分布的参数呢? EM算法!!1. 高斯混合模型假设观测数据 y1,y2,...,yNy_{1},y_{2},...,y_{N} 是由高斯混合模型生成的。 P(y|θ)=∑k=1Kαkθ(y|θk)P(y | \theta) =

2016-11-09 14:16:23 4063

原创 数据高低位交换

一、容易想到的方法unsigned char shift_fun1(unsigned char data) { unsigned char i; unsigned char tmp=0x00; for(i=0;i<8;i++) { tmp=((data>>i)&0x01)|tmp; if(i<7)

2016-10-25 17:24:44 3488

原创 OJ编程题教训

引用来自牛客网的一个讨论帖,帖子中列举了最常见的问题。 循环输入输出处理常见问题 1、为什么需要循环输入输出:通常来说OJ对于每道题里面有.in和.out文件,分别表示测试数据的输入和输出。如果某些编程题的所有数据都只做在一个.in和一个.out中,这样就会变成多组测试了,所以需要提交的代码中循环处理。 2、处理方法:其实这个问题可以避免,就是编程题后台每个样例做一组对应的.in和.

2016-09-06 15:05:52 4184

转载 堆和栈的区别

博客转自网上,经过简单整理。一、预备知识(程序的内存分配)一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) : 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全

2016-09-02 09:29:40 798

原创 算法学习 - 快速排序相关

1. 划分快速排序中最重要的步骤就是划分,即选择一个元素(很多地方称为枢纽元素),将序列划分成两部分,比枢纽元素大的放在枢纽元素的右边,比枢纽元素小的放在枢纽元素的左边。划分函数的思想:1. 选择一个枢纽元素(以选择序列的第一个元素为例),暂存到临时变量中2. 从序列的右边向左查找,找到一个比枢纽元素小的值。若找到,则将这个值填入到枢纽元素的位置3. 从序列的左边向右查找,找到

2016-08-31 10:18:13 894

原创 拷贝构造函数和赋值操作符

#include using namespace std;class Sales_Item{public: //构造函数 Sales_Item() : units_sold(0), revenue(0.0) { cout << "构造函数" << endl; } //构造函数 Sales_Item(const std::string &book) : isbn(book

2016-08-30 20:26:37 859

转载 linux高级编程基础系列:线程间通信

线程间通信机制:线程是一种轻量级的进程。进程的通信机制主要包括无名管道、有名管道、消息队列、信号量、共享内存以及信号等。这些机制都是由linux内核来维护的,实现起来都比较复杂,而且占用大量的系统资源。线程间的通信机制实现起来则相对简单,主要包括互斥锁、条件变量、读写锁和线程信号等。本文会对以上所涉及的线程间的通信机制一一展开。互斥锁通信机制1、互斥锁基本原理:互斥锁以排他的方式防止数据被并

2016-08-26 10:54:37 841

原创 【数据结构】二叉树的遍历

/* * 1.前序遍历的 递归实现和 非递归实现 * 2.中序遍历的 递归实现和 非递归实现 * 3.后序遍历的 递归实现和 非递归实现 * 4.根据两项遍历结果 重构树结构*/#include <iostream>#include <stdlib.h>#include <stack>using namespace std;struct BTreeNode{ int m_

2016-08-18 14:12:36 820

原创 【数据结构】链表相关内容

写一个已序链表,也就是说在链表添加节点的时候就将元素添加到合适的位置。#include <iostream>using namespace std;struct node{ int value; struct node * next;};void printnode(node* head){ while (head != NULL) { cou

2016-08-16 17:23:46 782

原创 机器学习 - 朴素贝叶斯法

博客内容源于《统计机器学习》一书的阅读笔记。Python的源码实现源于《机器学习实战》部分内容。首先,需要回顾下面的三个重要的公式: 条件概率: P(A|B)=P(AB)P(B)P(A|B) = \frac{P(AB)}{P(B)} 全概率公式: P(A)=∑iP(A|Bi)P(Bi)P(A) = \sum_{i}P(A|B_{i})P(B_{i}) 贝叶斯(Baye

2016-08-07 12:59:19 1163

原创 机器学习 - K近临法(KNN)

博客内容源于《统计机器学习》一书的阅读笔记。Python的源码实现源于《机器学习实战》部分内容。1. K近临算法【算法描述】给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最近临的K个实例,这个k个实例的多数属于某个类,就把该输入实例分为这个类。【数学描述】 输入:训练数据集 T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_{1},y_{1}),(

2016-08-05 10:38:57 1333

原创 机器学习 - 感知机

博客内容源于《统计机器学习》一书的阅读笔记。Python的源码实现源于《机器学习实战》部分内容。1. 感知机模型感知机是二分类的线性分类模型,该模型的输入为实例的特征向量,输出为实例的类别,一般取+1和-1两个值。感知机将实例划分为两类,属于判别模型。1.1 模型定义【感知机定义】 假设输入空间(特征空间)是X⊆Rn \mathcal{X} \subseteq R^{n},输出空间是Y={−1,

2016-08-04 10:01:30 2365

原创 牛顿迭代法求解方程

说明:该片博客源于博主的早些时候的一个csdn博客中的一篇,由于近期使用到了,所以再次作一总结。原文地址概述牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。1. 牛顿迭代公式设r r 是 f(x)=0 f(x) = 0 的根,选取 x0 x_{0} 作为r

2016-08-03 14:02:35 9001

原创 Unix/Linux下5种I/O模型

1. 五种I/O模型在网络编程,经常接触下述的I/O相关的概念:同步(Synchronous)异步(Asynchronous)阻塞(Blocking)非阻塞(Non-blocking)信号驱动(Signal driven)他们之间的关系如下图: 引用网上一个比喻: 你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下”,然后开始

2016-07-26 17:39:59 996

原创 C++四大类型转换

C++ 是一门强类型语言(C语言是弱类型语言),不同自定义类型之间的转换必须进行显式转换。C++ 中提供了四种转换操作符来细分显式类型转换。因为是操作符,所以他们不属于任何的namespace,也就不用包含任何头文件就可以使用。static_cast <new_type> (expression)const_cast <new_type> (expression)reinterpret_cast

2016-07-19 17:17:41 2367

原创 Unix系统编程(8) - I/O多路复用之epoll(Linux)

1. epoll的由来epoll是在Linux 2.6.28内核提出的,是select和poll的强化升级版本。相比select和poll,epoll更灵活,没有描述符限制。epoll在Unix中是没有的。 epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2. epoll的使用Linux 2.6.28之后

2016-07-19 15:58:10 1203

原创 Unix系统编程(7) - I/O多路复用之poll

poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。 poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。服务端代码下载:#include <stdio.h

2016-07-19 15:38:04 1179

原创 Unix系统编程(6) - I/O多路复用之select

1. I/O多路复用基本思路I/O多路复用就是让应用程序可以同时对多个I/O端口进行监控以判断其上的操作是否可以进行,达到时间复用的目的。由于I/O多路复用是在单一进程的上下文中的,因此每个逻辑流程都能访问该进程的全部地址空间,所以开销比多进程低得多。由于I/O多路复用都是在单一进程中进行的,所以不会出现多线程中的线程不安全的问题。2. select模型在man page中给出的select函数原型

2016-07-17 15:19:14 1190

mfc中嵌入google map

mfc界面中嵌入google map.通过mfc调用javascript来对地图进行交互。

2015-10-27

MFC窗口分割例子

MFC窗口分割的代码实例,使用VS2012实现,包括对分割条的绘制和修改

2015-11-21

dll封装MFC对话框资源

dll封装MFC对话框资源,博客中的源码工程。可以参看dll的资源封装以及使用。

2015-12-11

visual C++实践与提高:串口通信与工程应用

文档内介绍了MFC开发串口上位机程序的完整内容。

2015-01-28

Android OpenCV应用程序设计

Android OpenCV应用程序设计_完整版PDF电子书

2017-01-11

Java_TCP_IP_Socket编程

Java_TCP_IP_Socket编程.pdf

2017-01-11

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除