如果您参加了JMP 2011探索峰会九月份,在科罗拉多州丹佛市,您可能已经参加了我的演讲,图像不是全部,但肯定是JMP 9中的某些内容。我谈到了添加到的图像功能JMP对于版本9,我演示了一些真实的示例,这些示例演示了JMP用户如何利用图像功能来提取其图像中包含的数据。我共享了一些JMP脚本语言(JSL)脚本,希望它可以快速启动(使用双关语)使用图像功能。出于同样的原因,我决定将一个JSL文件代码段放在一起,该文件段还演示了图像功能。 该文件称为ImageExamples.jsl ,可以在JMP中找到文件交换。让我们从该文件中抽取一些示例,并进一步讨论它们。
您可能要做的第一件事是将现有映像放入JMP。为此,只需使用“新建映像”命令。
img =新图片( “ C:\ Users \ sasjvp \ Pictures \ Yellowstone08 \ IMG_0262.JPG” ) ;
新窗户( “原始图像” , img ) ;

本示例读取JPEG图像并将其作为图像对象(称为img)存储在JSL中。NewImage()可以读取JPG,PNG,BMP,GIF和TIF文件。
当我第一次这样做时,由于图像非常大,因此生成的窗口非常大。我想知道图像的实际尺寸是多少,所以我这样做了:
{ w , H } = img << getSize () ;
该命令为我提供了图像的宽度和高度,即3264 x 2448,这是一个相当大的图像。因此,为了以更合理的尺寸显示它,我通过为图像指定了新的宽度和高度来按比例缩小它。
img << setSize ( { w / 4 , H / 4 } ) ;
现在,图像为816 x 612,即每个尺寸原始尺寸的四分之一。请注意,通过将宽度和高度包装在大括号中来将其作为列表传递。
现在,我想处理图像,但是我想保留原始版本。因此,我将使用NewImage()创建我的图像的副本。
img2 =新图片( img ) ;
这将创建我的原始图像的副本作为第二个图像,称为img2。
我想做的下一件事是获取图像的像素值。由于我的图像是彩色图像,因此每个像素都按照三种颜色分量来定义:红色,绿色和蓝色。像素数据以矩阵形式返回给我要求的每个颜色分量。
{ [R , G , b } = img2 << getPixels ( “ rgb” ) ;
在这种情况下,我将得到三个矩阵。如果我的图像具有透明度,则可以通过指定“ rgba”来要求四个矩阵。我还可以仅通过指定所需的颜色分量就只需要一种颜色分量,例如绿色分量为“ g”。每个矩阵代表归一化颜色空间中的像素颜色值,这意味着该值介于0.0和1.0之间(包括0.0和1.0)。
将像素值作为矩阵获取的好处是,我现在可以对像素进行矩阵数学运算了。如果要创建图像的灰度版本,可以使用以下公式非常简单地完成此操作。
一世= .30 * [R + .59 * G + .11 * b ;
这与电视用于将彩色节目转换为黑白的公式相同。如果您和我一样大,您可能还记得黑白电视,它不仅是黑白的,而且还包括黑白之间的灰色范围。此公式将30%的红色成分与59%的绿色成分和11%的蓝色成分结合在一起。这将为我的灰度计算强度值。现在,我可以用灰度强度值替换红色,绿色和蓝色的原始颜色分量,以生成灰度图像。
img2 << setPixels ( “ rgb” , {一世,一世,一世} ) ;
这是结果。

由于JMP在JSL中支持矩阵数学运算,因此我们不必遍历图像并单独处理每个像素。我们可以一次将此公式应用于整个图像,既方便又高效。

当然,JMP的真正优势在于其进行统计分析和数据发现的能力。为此,我们需要数据采用数据表的形式。因此,让我们读入图像,提取像素数据并从中创建数据表。
让我们看一下从MRI拍摄的图像。我们可以像以前一样使用NewImage()命令将图像读入JMP。我们也可以像以前一样使用getPixels()命令,除了该图像已经是灰度图像之外,因此我们只需要一个颜色分量。第一个组件仍称为“ r”组件。一旦有了像素值,就可以创建数据表。
img =新图片( “ C:\ JMP \ mri.jpg” ) ;
{象素} = img << getPixels ( “ r” ) ;
dt =新表( “像素数据” ,
newColumn ( “价值” ,设定值(象素))) ;
分配(连续分配(柱子( :价值观) ,离群盒
阴谋( 0 ) ) ) ;
新窗户( “分析图像数据” , img ) ;
现在,像素值与读取到JMP中的任何其他数据一样都在数据表中。这意味着我们现在可以使用JMP中的统计分析功能来分析数据。此时要使用什么取决于您的数据是什么以及您要回答的问题。在这个例子中,我做了一个简单的分布来向我展示数据的范围和频率。

我希望到目前为止,我已经给您足够的例子,让您开始在JMP中使用图像。不要忘记下载示例脚本, ImageExamples.jsl ,来自JMP文件交换。它显示了比我在这里提到的更多示例。它包括用于旋转,透明度和滤镜的命令。让我知道你的想法。
使用JSL在JMP中进行图像处理写道:
[...]命令getPixels(“ rgb”),将每个图像作为三个矩阵的集合返回-每种颜色分量(红色,绿色和蓝色)一个。要混合图像,我们将Image2乘以百分比,然后将其乘以Image1乘以1减去百分比。然后,将其设置为结果图像Image3。这里的所有都是它的。有关getPixels()以及其他图像功能的进一步说明,请查看我的另一篇博客文章“使用JMP 9改善图像”。[...]