史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

在MATLAB环境下进化的逻辑阵列

内部设计讨论本周促使我反思的历史逻辑阵列在MATLAB。由于图像处理工具箱对逻辑阵列作为二进制图像,它们的行为和使用是很重要的人(和使用!)产品发展。

如果你穿越时间至1996年,MATLAB只有单一类型:二维、双精度矩阵。没有多维数组,整数数组,char数组单元数组、结构体数组,或逻辑数组。您可以定义任何类型你想要的是二维双。

但是如果你十年前回到1987年,你会发现一个重要的MATLAB“逻辑”行为存在的即使是这样:逻辑索引。基本上,逻辑索引定义当时的表达形式(B),在那里B是一样的尺寸吗一个和只包含0和1。

下面是一个从MATLAB 3.13屏幕截图,这是我用MATLAB软件的最早版本。(令人惊讶的是,它仍然运行在我的电脑今天!)

MATLAB 3.13屏幕截图

你可以看到上面的影响逻辑索引:提取所有位置索引向量中的值(或矩阵)= 1。

我不知道这种逻辑索引行为扩展追溯到1984年第一个商业版的MATLAB。我知道这是一个非常有用的方法来提取或修改组矩阵元素对应于某些标准,和我使用它所有的时间。我教逻辑索引当我给介绍在MATLAB图像处理。

但是这些早期的MATLAB实现的行为逻辑索引版本有一个隐藏的阴暗的一面。例如,表达式([1])在哪里一个是一个行向量。在早期的MATLAB,结果将是一个双元素向量包含两个向量的第一个元素的副本。除非…向量碰巧有两个元素!在这种情况下,表达式([1])将被视为一个逻辑索引表达式,输出是一样的一个

这里有一个屏幕截图的MATLAB 4.2摄氏度(1994)显示效果。

MATLAB 4.2 c屏幕截图

换句话说,对于一个行向量一个,((1,P))导致p元素包含的行向量(1),除非一个碰巧有P元素!哦,那是不好的。这是一个错误即将发生在很多代码。

我们采取措施消除这种“行为不连续”于1997年在MATLAB 5.0引入的概念逻辑阵列的“属性”。逻辑运算符和许多适当的函数输出标记为逻辑,和唯一索引数组,这个逻辑属性会导致逻辑索引使用。

这是1997年从MATLAB 5.1屏幕截图显示这种新形式的逻辑索引。

MATLAB 5.1屏幕截图

注意到的输出(没有工作空间浏览器)。的变量b表达式的结果5 >,显示为一个双精度矩阵标记为逻辑。

这是一个改善行为,但仍有一个内存使用问题。双精度很“重”数据类型为二进制值使用!Nondouble数据类型刚刚在MATLAB 5.0中引入的,但几乎没有人知道这件事。只有图像处理工具箱是利用nondouble数据类型。在这个时候,图像处理工具箱建立了公约的治疗逻辑矩阵作为二进制图像。矩阵之前,只包含0和1被认为是二元的,一个有缺陷的约定接受类似的歧义与前面的形式逻辑索引。

最后一个大的变化是在MATLAB 6.5在2002年。在这个版本的MATLAB,合乎逻辑的,因为自己的类型而不是一个属性。这里有一个屏幕截图显示命令窗口和工作空间浏览器。

MATLAB 6.5屏幕截图

注意变量b有类逻辑而不是,注意它只使用9字节而不是72年。

我今天会结束almost-relevant问题问你:你的第一个版本MATLAB,为什么你开始使用它了吗?证明你是一个权力的读者,这个博客条目发布你的答案如下评论。

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。