爱因斯坦求和约定

列维-奇维塔符号(Levi-Civita symbol)和 爱因斯坦标记(Einstein notation)是张量运算的常用标记。

爱因斯坦求和约定(Einstein summation convention)又称为爱因斯坦标记法(Einstein notation),可以让表达式更加简洁明了。里面主要涉及两个概念:哑标(dummy index),自由标(free index)

阅读更多爱因斯坦求和约定

ImageJ拓展开发script、macro和 plugin

在处理图像和三维数据方面有一个强大且拓展性强的软件ImageJ,ImageJ本身功能不是特别多,但是多年以来积累了丰富的插件,使得其成为专业图像处理和数据科学、医学图像处理等领域的利器。FIJI ImageJ打包了很多插件,可以实现很多功能,但是总有需求超出功能的时候,我们可能希望自己开发插件。

ImageJ支持多种形式的拓展,支持用我们熟悉的Python语言(Jython)进行拓展开发,也支持JS脚本的macro开发,还支持Java开发的插件。实际上ImageJ开发插件是很简单的,有时候我们只需在demo代码基础上改上短短几行就能实现我们自己定制化的功能。这篇博客主要简单介绍script、macro和plugin开发的流程,指引一下资源位置,给简单的流程介绍,不会具体深入代码层面。

阅读更多ImageJ拓展开发script、macro和 plugin

Windows好用的工具(一)PowerToys

微软的windows搭配上自家的powertoys使用体验是很棒的,博主认为几乎是windows必备软件了,可以极大提升系统操作体验(甚至可以和Mac体验一样便捷),以至于博主要专门写一篇博客记录一下。

PowerToys一般设置成开机自动启动即可。PowerToys提供和系统深度融合的取色、应用置顶、图像大小调整、桌面多区域、鼠标高量、类似Mac聚焦搜索等功能。软件下载地址:https://github.com/microsoft/PowerToys/releases/

阅读更多Windows好用的工具(一)PowerToys

C++调用python(一)环境配置

使用Pybind11可以让python来调用C++,使用python本身的库也可以让C++来调用python函数,以实现C++和python相互调用,实际上我们还可以同时调试C++和Python(混合模式调试,正如封面展示这样),混合模式调试要使用Visual Studio调python,后面博客会介绍C++调用python的传参和混合模式调试,这篇博客主要先介绍C++调用python的流程:

阅读更多C++调用python(一)环境配置

Visual Studio在直方图、曲线、图像调试插件

现在主流的IDE都广泛支持安装插件来实现各种有用的功能,在使用Visual Studio 2019/2017开发工具时,如果要在调试状态下查看C++中某个数组,像matlab或python的plot一样画出曲线和直方图,或者查看内存中的图像裸数据,都有插件可以实现,这里介绍三个免费的工具插件:Image Watch查看图像,ArrayPlotter将数组plot成曲线,Graphical Debugging(Plot Watch)查看直方图。

阅读更多Visual Studio在直方图、曲线、图像调试插件

看一看泄露的Windows源码(一)源码目录结构

昨天有一份42.9G的windows源码包泄露出来,包括多个Windows、Windows Searver发行版的源码,最重要的是Windows XP和Windows Server 2003目前依旧运行在很多老旧的电脑上,如果有漏洞被拿来利用,可能产生很严重的危害。

博主在数年之前就拿到过Windiows Server的源码,但是代码很杂,也编译不了,不过这次源码泄露范围更广,在各个社区也有分析,并且已经有一些人编译成功了(本来还以为需要微软内部的工具集,看起来泄露的压缩包里都有了,微软糗大了),可以跟着学习一波,先简单看下,能不能从里面抽出一些有用的工具。

阅读更多看一看泄露的Windows源码(一)源码目录结构

Image Watch支持自定义的图像类型

Image Watch插件是为了满足OpenCV可视化图像处理调试而开发的插件,天然的支持OpenCV各种图像类型。如果我们要支持自己的图像类型在Image Watch中显示,那么应该怎么做呢?
有两种方法可以使用 Image Watch 来显示自己的图像,一是使用Image Watch自带的显示内存操作,使用@mem(img_ptr,type,width,height,stride) 来显示,二是使用Image Watch的类型拓展,加入自己的类型的配置文件即可。

阅读更多Image Watch支持自定义的图像类型

自制操作系统(二)保护模式

上一篇博客我们简单写了一个引导,还没有进入系统,在进入系统之前,我们有必要先了解下CPU的实模式和保护模式。我们的程序不加任何保护,直接运行在CPU上,称为实模式,16位实模式最大寻址空间为1M。CPU可以通过保护模式拓展寻址空间,并进行访问权限管理和校验,32位保护模式的寻址空间可以拓展到4G。在保护模式下物理内存、页、中断都会保护起来、不同特权级下IO端口也不能随意使用。

阅读更多自制操作系统(二)保护模式

自制操作系统(一)引导扇区

一个操作系统,想要被BIOS找到,依靠的就是引导扇区。所以操作系统的第一步就是实现引导扇区。这篇博客要用到两个工具:nasm和vmware。引导扇区一般用汇编编写,我们使用nasm来把编译汇编源文件翻译成机器码。nasm工具可以在 这里 下载。另外我们在虚拟机上模拟启动(或者烧录到U盘启动),所以准备VMWare或者其它虚拟机软件,准备好着这两个工具就可以开始了。

阅读更多自制操作系统(一)引导扇区

在jupyter中使用imshow显示opencv图像

jupyter中用cv2.imshow打开窗口进行显示后不能点击关闭按钮,否则消息处理机制会导致python挂掉。那么只有用matplotlib来画了,由于numpy和opencv的rgb通道排列是反的,所以做一个转化就可以了,粘贴下面代码里的函数,直接调用就好。

阅读更多在jupyter中使用imshow显示opencv图像