<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[翼遥君的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Robin__Chou</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Robin__Chou]]></copyright><item><title><![CDATA[基于小安派AiPi-Eye-S1的Nes游戏机]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/134102833</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/134102833</guid><author>Robin__Chou</author><pubDate>Sun, 29 Oct 2023 14:35:28 +0800</pubDate><description><![CDATA[也可以使用锂电池给板子供电，实测壳体的液晶屏和PCB之间的间距足够放下一个3.7v的锂电池。UI界面分为两层，底层是game的界面，上浮的一层显示的是game手柄的8个触摸按键。为了方便的确定触摸按键的位置，特地在solidworks中绘制了一个草图，用草图的尺寸来方便确定每个按键的屏幕像素坐标。在完成每一行的解码后，在这个task中会及时的去渲染屏幕中的对应行。额外需要说明的是显示是使用的横向的坐标系，但是触摸驱动使用的是纵向的坐标系。他们的坐标原点是不一样的，需要进行坐标的变换。]]></description><category></category></item><item><title><![CDATA[GPU渲染管线之旅|08 Pixel Shader]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/115612667</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/115612667</guid><author>Robin__Chou</author><pubDate>Fri, 18 Jun 2021 09:10:37 +0800</pubDate><description><![CDATA[在这一部分中，我将处理像素处理的前半部分:dispatch和实际的像素着色。事实上，这是大多数图形程序员在谈到PS stage时想到的. 我们将在下一部分中谈到的alpha blend和Late-Z。在硬件上，情况有点复杂，我们之后会看到——这也是我将像素处理分成两部分的原因。在我们进入这个阶段的时候，阴影的像素坐标(实际上是四边形)，加上相关的覆盖遮罩，从光栅化器/早期z单元到达——三角形的顺序与应用程序提交的完全相同，正如我上次指出的那样。我们在这里需要做的是将线性的，连续的工作流输出到数百个着色器单元]]></description><category></category></item><item><title><![CDATA[GPU渲染管线之旅|07 深度处理、模板处理]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/114952153</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/114952153</guid><author>Robin__Chou</author><pubDate>Wed, 17 Mar 2021 22:01:35 +0800</pubDate><description><![CDATA[在这一篇中，我们来讨论Z-pipline的前端部分(简称它为early-Z), 以及它是在光栅化中怎么起作用的。和上一篇一样，本篇也不会按实际的管道顺序进行讨论；我将首先描述基础算法，然后再补充管线中的各个阶段（以相反的顺序可以更简单的解释这些内容）。
1.插值
Z通过三角形进行插值，因为三角形顶点的属性是由vertex shader输出的。 让我先花点时间解释一下它是如何工作的。 在这一点上，我最初有一节介绍如何推导插值背后的数学运算，以及为何透视插值以这种方式起作用。 我花了几个小时苦苦挣扎，因为我试图]]></description><category></category></item><item><title><![CDATA[谈谈OpenCV中的四边形]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/112705540</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/112705540</guid><author>Robin__Chou</author><pubDate>Sat, 16 Jan 2021 14:19:06 +0800</pubDate><description><![CDATA[首先抛出一个问题，给定一系列二维平面上的的点，这些点是可以组成一个封闭的二维图形。因为这些点是矩形区域拍摄图像后识别得到的图形的边界点，所以我们要抽象出来这个矩形，也就是我们要反映出这个矩形。问题是在拍照的时候摄像头可能不是正对着图形的，那么矩形就必然在图像上反映为一个四边形, 如下图所示。

那怎么得到这个四边形的四个顶点呢？使用经典图像处理的算法的话可以使用OpenCV提供了几个和矩形相关的函数接口。另一类就是使用机器学习类算法检测定位四个角点。首先来看看使用经典图像处理的算法来进行解决。
1.最小包络]]></description><category></category></item><item><title><![CDATA[GPU渲染管线之旅|06 三角形的生成和建立]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/107424818</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/107424818</guid><author>Robin__Chou</author><pubDate>Sat, 18 Jul 2020 10:14:39 +0800</pubDate><description><![CDATA[系列文章原发布在自己搭建的博客上：https://binean.top/

欢迎回来。这次我们去看看三角形的光栅化。但在光栅化三角形之前，我们需要执行三角形设置，并且在设置三角形之前，我还要解释一下我们做的准备是为了什么，最后我们来聊聊三角形硬件光栅化算法。
1.如何画一个三角形
首先，给很熟悉这部分并自己写过软纹理映射的人一点小提示：三角形光栅器一次要处理一堆东西：跟踪三角形的形状，插值出坐标uuu和vvv（对于透视矫正映射，是u/zu/zu/z，v/zv/zv/z和1/z1/z1/z），执行Z缓冲测试.]]></description><category></category></item><item><title><![CDATA[GPU渲染管线之旅|05 图元处理、Clip/Cull, 投影和视图变换]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/107166775</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/107166775</guid><author>Robin__Chou</author><pubDate>Mon, 06 Jul 2020 20:07:16 +0800</pubDate><description><![CDATA[系列文章原发布在自己搭建的博客上：https://binean.top/

上一篇中我们讨论了关于“纹理和采样”，这一篇我们回到3D管线的前端。在执行完顶点着色之后，就可以实际的渲染东西了，对吗？暂时还不行， 因为在我们实际开始光栅化图元之前，仍然还有很多事要做。所以在本篇里我们不会看到任何光栅化内容——还得等到下次再讲。
1. 图元装载
当我们离开顶点处理流水线时，从着色器单元中得到了一个包含已经着色完成的顶点数据内存块，该内存块中包含一些完整的图元。我们不会让三角形，直线或者补块(pathces)之类.]]></description><category></category></item><item><title><![CDATA[GPU渲染管线之旅|04 纹理和采样]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/107138467</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/107138467</guid><author>Robin__Chou</author><pubDate>Sun, 05 Jul 2020 14:18:00 +0800</pubDate><description><![CDATA[上一篇讨论了顶点着色器,涵盖了GPU通用着色器处理单元的一些内容。它们都仅仅是向量处理单元, 但是当我们在访问Resource的时候,通常都不是这种向量的形式,所以GPU中还需要另一个专门用来在Pipeline中处理整数的单元：Texture Sampler. 这个单元内部相对比较复杂,复杂(也很有趣)到我们需要用单独的一篇文章来讨论它们。
1.纹理阶段
在我们开始了解真正的纹理操作之前,让我们先对API阶段的纹理操作有个完整的认识。在D3D11中,这主要由三个部分组成：

采样阶段。设置滤波模式,设置寻址]]></description><category></category></item><item><title><![CDATA[GPU渲染管线之旅|03 图形管线概览及GPU中顶点处理]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/105989251</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/105989251</guid><author>Robin__Chou</author><pubDate>Fri, 08 May 2020 10:08:59 +0800</pubDate><description><![CDATA[通过前面几篇的内容，我们知道，应用程序中的Draw API调用会经过D3D Runtime, 用户态驱动等等各个层级，最终将命令传到GPU的命令解释器，GPU就会根据命令的内容来进行图形的计算和处理。那么这一篇我们就来看看顶点的处理流程。
1. 开胃菜
在介绍GPU的顶点处理之前，我们先看看3D渲染管线。3D渲染管线是由一系列的stage构成的，每个stage都完成一些特定的工作。下图是D3D 1...]]></description><category></category></item><item><title><![CDATA[GPU渲染管线之旅|02 GPU内存架构和命令处理器]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/105920812</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/105920812</guid><author>Robin__Chou</author><pubDate>Mon, 04 May 2020 17:51:21 +0800</pubDate><description><![CDATA[系列文章原发布在自己搭建的博客上：https://binean.top/

上一篇中主要介绍了3D渲染命令到达GPU之前经历过的各个阶段。用下图可以概括上一篇中所讲的内容，当然其中很多细节没有出现在图中。之前我们说KMD将命令送给了硬件，这个简单的“送”的过程实际上并不是那么简单的。我们知道显卡都是通过信号线连在主板上的，所以我们送命令都是需要走这些信号线的。还有就是我们把命令送给显卡，那显卡总...]]></description><category></category></item><item><title><![CDATA[GPU渲染管线之旅|01 从App到硬件各个层级]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/105916421</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/105916421</guid><author>Robin__Chou</author><pubDate>Mon, 04 May 2020 13:16:48 +0800</pubDate><description><![CDATA[0. 介绍从App到硬件各个层级 （Introduction: the Software stack）
我在这里发布了东西已经有一段时间了，我可能会用这个地方来解释一些关于2011年图形硬件和软件的一般观点。通常你可以找到你电脑中显卡调用栈的相关描述，但是这些调用关系是如何工作？它们又是为什么要这样呢？这些问题就不那么容易找到答案了。我会尽量填补空白，而不会对特定的硬件进行具体的描述。我将主要讨论...]]></description><category></category></item><item><title><![CDATA[Python链家二手房数据分析]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/78492676</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/78492676</guid><author>Robin__Chou</author><pubDate>Tue, 15 Jan 2019 23:52:48 +0800</pubDate><description><![CDATA[from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import Ridge
fro]]></description><category></category></item><item><title><![CDATA[C++内存管理(2)—内存操作相关函数]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/86501052</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/86501052</guid><author>Robin__Chou</author><pubDate>Tue, 15 Jan 2019 23:49:41 +0800</pubDate><description><![CDATA[转载请注明出处：https://www.jianshu.com/p/ca51012db547

C++内存管理（1）——分配和释放的四个层面 上一篇中从整体上来看系统中四个层面上内存的分配和释放，这样我们就对内存分配有了一个整体的认识。这一节则详细的来写写这四个层面中的操作符或函数的使用方法，以及他们背后的调用关系。首先我们从我们使用最多的new和delete来说起。
1. new 和 dele...]]></description><category></category></item><item><title><![CDATA[C++内存管理(1)—分配和释放的四个层面]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/86501044</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/86501044</guid><author>Robin__Chou</author><pubDate>Tue, 15 Jan 2019 23:48:49 +0800</pubDate><description><![CDATA[
转载请注明出处 https://www.jianshu.com/p/8f5e4d215d97

1. 站在高处思考
从一个比较高的角度来看，内存管理说到底就是使用OS提供的API或是使用运行在OS之上的Runtime或者更为上层的SDK对内存进行申请和释放。C/C++中内存管理是个经久不衰的话题，因为C/C++不像其它语言那样拥有自己的GC机制。这也是C/C++为人诟病的地方，特别对于使用C/C...]]></description><category></category></item><item><title><![CDATA[AI与医学辅助诊断]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/75807915</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/75807915</guid><author>Robin__Chou</author><pubDate>Sat, 22 Jul 2017 22:23:18 +0800</pubDate><description><![CDATA[人工智能一词越来越频繁的出现在日常生活中。一种事物的时髦，必然有其背后的原因。而对于这样一个大的话题，从整体上来叙述总显得有些不接地气。作为跟AI沾过一些边的博主将以自己接触的方面来发表一点看法。 首先介绍一下，博主在研究生期间从事医疗数字影像研究和医疗系统开发，期间跟临床医生也有过一些交流，研究生课题也是智能辅助诊断的研究。因此，文章可能会实际工程使用为主要的着眼点，来表述一下对是否加入AI这一浪]]></description><category></category></item><item><title><![CDATA[D3D 9和D3D 11绘制流水线对比]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/75799148</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/75799148</guid><author>Robin__Chou</author><pubDate>Sat, 22 Jul 2017 18:51:38 +0800</pubDate><description><![CDATA[绘制流水线（pipline）是图形学编程中属于各种图形学框架的骨架。Windows平台下3D游戏开发几乎都会用到D3D来进行游戏引擎的设计。D3D 9是使用比较广泛的一个版本，D3D 9 中比较核心的就是固定渲染管线（Fixed Function Pipline）。下图是从官方的SDK中翻译的，从这个图中就可以比较清晰的看到D3D 9的绘制流水线。 
 
 
D3D 9 的绘制流水线 
从图中标有颜]]></description><category></category></item><item><title><![CDATA[Java网络编程 - 非阻塞IO模型]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/72630194</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/72630194</guid><author>Robin__Chou</author><pubDate>Mon, 22 May 2017 21:14:32 +0800</pubDate><description><![CDATA[1. Java NIO简介NIO(Non-Block I/O)是在JDK1.4之后引入的。NIO弥补了同步阻塞I/O的缺点。提供了高速、面向块的I/O。 
在NIO库中，所有的数据都是用缓冲区来处理的，在读取数据的时候，他是直接读到缓冲区中的：在写数据时，写到缓冲区中。任何时候访问NIO中的数据都是通过缓冲区进行操作。 
Java NIO由三个核心部分组成，Buffers, Channel和Sele]]></description><category></category></item><item><title><![CDATA[Java网络编程 - 同步阻塞IO模型]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/54378934</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/54378934</guid><author>Robin__Chou</author><pubDate>Thu, 12 Jan 2017 16:07:16 +0800</pubDate><description><![CDATA[由于项目需要使用Java开发后台服务器程序，C/C++程序员就要学学Java了。Unix/Linux下的几种网络IO模型在之前的博客中已经提及到，但是使用的大多数都是Unix/Linux下的系统调用。 
  博客内容大多数来自网络资料以及书籍《Netty权威指南》，转载请注明出处，谢谢！
如果想了解Unix/Linux下网络IO模型的可以看如下的几篇相关博客，里面大多都是代码段，原理性的讲解比较少。]]></description><category></category></item><item><title><![CDATA[OpenCV - 最大熵分割]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/53931442</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/53931442</guid><author>Robin__Chou</author><pubDate>Thu, 29 Dec 2016 18:58:31 +0800</pubDate><description><![CDATA[转载请注明出处，谢谢.
图像分割系列的博客连续写了两篇了，这次继续写写利用最大熵模型来进行图像的阈值分割。如果对其他相关博客感兴趣可进入下面的链接查看： 
1. OpenCV - 区域生长算法 
2. OpenCV - 均值迭代分割 
3. OpenCV - 最大间方差(OTUS)分割1. 最大熵是什么？这里所说的熵是指信息熵，信息熵是来自于信息论的一个词，它是对系统所含信息的一种度量。通俗的讲，系]]></description><category></category></item><item><title><![CDATA[OpenCV - 最大间方差分割]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/53492470</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/53492470</guid><author>Robin__Chou</author><pubDate>Tue, 06 Dec 2016 20:10:19 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[OpenCV - 均值迭代分割]]></title><link>https://blog.youkuaiyun.com/Robin__Chou/article/details/53448868</link><guid>https://blog.youkuaiyun.com/Robin__Chou/article/details/53448868</guid><author>Robin__Chou</author><pubDate>Sat, 03 Dec 2016 23:12:24 +0800</pubDate><description><![CDATA[【题外话】:之前在博客中写过一篇“区域生长”的博客，区域生长在平时经常用到，也比较容易理解和代码实现，所以在很多情况下大家会选择这种方法。但是区域生长有一个最致命的点就是需要选取一个生长的种子点。 
  为了交流学习，同时也为了后面查阅方便，准备陆续将基于直方图的几种分割算法加以总结。
1、均值迭代算法的描述对一幅图像MM,均值迭代算法就是要迭代计算得到一个灰度值TT，使得这个灰度值TT将图像分成的]]></description><category></category></item></channel></rss>