史蒂夫与MATLAB图像处理

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

函数参数的一个示例验证了效用函数的图像

我昨天在一个原型时,我发现自己写一个小一点的代码很有用,我想知道为什么我从未做过。我想展示给你。它将是一个机会去探索一些MATLAB的最新进展,使有用的功能语法容易写。
我写了一个简单的函数调用 imageSizeInXY 。这个函数接受一个MATLAB图形 图像 对象,并返回它的总宽度和高度的空间x - y坐标轴的单位。
函数= imageSizeInXY (im)
结束
(我将显示下面的全面落实。)我用这样的函数。
一个= imread (“peppers.png”);
我= imshow (XData = [1], YData = [1]);
imageSizeInXY_v1 (im)
ans = 1×2
2.0039 - 2.0052
但这个函数只适用如果我有捕获图像对象在一个变量中。通常,我叫 imshow 没有输出参数,所以我没有图像对象:
imshow (XData = [1], YData = [1])
我想,它将确定如果我可以打电话 imageSizeInXY 没有输入参数,它就会自动告诉我有关的图像显示在当前图。简要思考这个问题之后,我写了以下几点:
函数= imageSizeInXY (im)
参数
即时通讯(1,1)matlab.graphics.primitive.Image= findimage
结束
结束
函数我= findimage
image_objects = imhandles (imgca);
如果isempty (image_objects)
错误(“没有图像对象发现。”);
结束
我= image_objects (1);
结束
第一个有趣的使用 参数 块,R2019b介绍了MATLAB语言的语法。的 参数 ,更普遍 函数参数验证 特性,有助于实现函数与有用的错误信息和有用的违约行为而编写少量代码。
让我们看看这个函数的开始。
函数= imageSizeInXY (im)
参数
即时通讯(1,1)matlab.graphics.primitive.Image= findimage
结束
参数 块让我们指定约束和函数的输入参数的默认行为。“ (1,1) “说,一部分输入参数, 即时通讯 ,必须有大小 1 \ * 1美元 。换句话说,它必须是一个标量。第二部分,“ matlab.graphics.primitive.Image ”,表明 即时通讯 需要这个类(或可转换)。
MATLAB将自动执行这些大小和类型约束,发出特定的错误消息,如果他们没有得到满足。
image-size-in-xy-errors.png
请注意,您可以通过调用MATLAB图形对象的完整类名 :
类(im)
ans =“matlab.graphics.primitive.Image”
= findimage “一部分是用于自动提供一个默认值输入 即时通讯 。这是一个恒定的值或表达式。在这种情况下, findimage 是一个调用本地函数的表达式,我写了:
函数我= findimage
image_objects = imhandles (imgca);
如果isempty (image_objects)
错误(“没有图像对象发现。”);
结束
我= image_objects (1);
结束
的函数 imgca imhandles 图像处理工具箱工具。这个函数 imgca 返回最近的电流 对象包含一个或更多的图片, imhandles 返回 图像 对象。
只是我最后几行小心处理的情况下没有 图像 物体被发现,或者有多个地方 图像 中的对象
全面实施,包括简单的尺寸计算,如下。
函数= imageSizeInXY (im)
参数
即时通讯(1,1)matlab.graphics.primitive.Image= findimage
结束
pixel_width =程度(im.XData、大小(im.CData 2));
pixel_height =程度(im.YData、大小(im.CData 1));
x1 = im.XData (1)——(pixel_width / 2);
x2 = im.XData(结束)+ (pixel_width / 2);
日元= im.YData (1)——(pixel_height / 2);
y2 = im.YData(结束)+ (pixel_height / 2);
= ((x2 - x1) (y2 - y1)];
结束
函数我= findimage
image_objects = imhandles (imgca);
如果isempty (image_objects)
错误(“没有图像对象发现。”);
结束
我= image_objects (1);
结束
函数num_pixels e =程度(数据)
如果(num_pixels < = 1)
e = 1;
其他的
e =(数据(2)- (1))/ (num_pixels - 1);
结束
结束
现在我不需要记得打电话 imshow 和一个输出参数来使用它。
如果你还没有使用函数参数验证和探索 参数 块MATLAB编写自己的函数,我鼓励你给他们一个尝试。很值得的!
|
  • 打印

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。