用MATLAB进行图像处理

图像处理概念,算法和MATLAB

MATLAB默认图像背后的故事

大约在1990年左右,在MATLAB的第4版中增加了图像显示。许多细心的用户注意到低级图像显示对象具有默认像素值。换句话说,如果你打电话图像如果没有输入参数,它将显示一个小图像。如果你是MATLAB 4的用户,你可能看到过这样的东西:

当MATLAB 5发布时,一些用户注意到默认图像发生了变化。

图像配色(灰度(32))轴ij

一些用户还注意到,新的默认图像中的像素值不是整数。

H = findobj;“类型”“图像”);Cdata = get(h,CData的);cdata (1:3, 1:3)
Ans = 11.2307 12.4251 10.4251 14.4251 15.7483 13.7483 12.3938 13.7483 12.7483

小数部分有什么有趣的地方吗?

Imagesc (cdata - floor(cdata))

显然如此。

我现在承认——你可以把这一切都怪到我头上。上周,在佐治亚州亚特兰大举行的IEEE图像处理国际会议上,我第一次公开讲述了这个故事。现在,亲爱的博客读者,你也会听到它。

我是在1993年底加入The MathWorks的。1994年的某个时候,该公司举行了第一次员工慈善拍卖。竞标的“项目”之一是为当时正在开发的MATLAB 5选择默认图像的权利。作为开发中的新“图像处理人员”,我感到有责任参与竞标。(至少,我后来是这么跟妻子解释的。)事实证明,另一个MathWorks开发人员非常想赢得这个项目,所以为了赢得它,我最终花了很多钱。(这一切都是为了慈善,我一直提醒自己。)

一旦我赢得了拍卖,我就得决定选哪幅画。在此期间,我经常听到用户抱怨MATLAB只能处理双精度值。(这种情况一直持续到1997年。)因为我听说了很多关于这个问题的内容,所以我决定将所有尾数位都用于新的默认映像。我征求了其他开发者的意见。

这里是各种图像“隐藏”在默认图像像素值的不同位片。(要自己运行代码,请下载这个小实用函数,bitslice)。

存储在5位最高有效位中的图像就是你经常看到的图像。这是我的大儿子。

Defimage = pow2(get(0,“DefaultImageCData”), 47);Mag = 200;47岁的imshow (bitslice (defimage 51));

接下来的5位显示了属于MathWorks开发人员的狗。

imshow (bitslice (defimage, 42岁,46));

这是MathWorks的另一个宠儿。

37岁的imshow (bitslice (defimage 41));

这个著名的矩阵是3 × 3希尔伯特矩阵的逆矩阵。

imshow (bitslice (defimage, 36岁,36));

这是公司原始标志的低分辨率版本。

imshow (bitslice (defimage, 35岁,35));

罗兰最喜欢的数字。

imshow (bitslice (defimage, 34岁,34));

3乘3的魔方。

33岁的imshow (bitslice (defimage 33));

我最小的儿子。

28岁的imshow (bitslice (defimage 32));

阿尔布雷希特·丢勒的《忧郁》中隐藏着一个著名的魔方。

imshow (bitslice (defimage, 23岁,27));

我无法抗拒这种视觉双关。这是MATLAB的原始“八位图像”。(这会告诉你我的幽默感。)

imshow (bitslice (defimage、18、22));

4岁的罗兰。

imshow (bitslice (defimage、13、16));

威尔金森,吉文斯和福赛斯,来自1964年加特林堡数字代数会议。

imshow (bitslice (defimage 9 12));

我。

imshow (bitslice (defimage、5、8));

MATLAB 4的原始默认图像仍然在那里。

imshow (bitslice (defimage 1 4));

最后,三个比特片的特定组合就会产生一个数字17叠加在上面的黄色猪。有人告诉我,这是某个数学界的秘密玩笑。

R =位切片(defimage,0,0);G =位切片(defimage,17,17);B = bitslice(defimage,34,34);imshow (cat (r, g, b));

这就是MATLAB默认图像的完整故事。

函数B =位片(a,低位,高位)% BITSLICE (A、LOWBIT HIGHBIT)%缩放返回值,使最大值为1.0。B = a / 2^(lowbit);B = fix(B);B = B / 2^(高位-低位+ 1);B = B - fix(B);B = B / max(B (:));结束




发布与MATLAB®R2021a

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。