【问题标题】:Image processing general questions and terms图像处理一般问题和术语
【发布时间】:2021-01-17 10:52:40
【问题描述】:

) 在数字图像处理中,图像是由 [m,n] 表示的行 (m) 和列 (n) 的矩阵。当显示为图像输出时,行会变成 Y 轴,而列会变成 X 轴吗?只是想确认这一点,因为有时它会令人困惑。在 Matlab 和教科书中,约定是什么?

  1. 我们将灰度图像称为矩阵还是二维数组?这两者有什么区别?

  2. 什么是张量图像?

【问题讨论】:

  • 你可以很容易地用谷歌搜索第一个。第二个是肯定的,二维数组是一个矩阵。张量图像是每个像素具有多个值的图像。

标签: matlab image-processing matrix


【解决方案1】:

• 行将从左向右延伸。这些列将从上到下延伸。每个正方形下方代表图像中的一个像素。要计算行数,您将沿着 y 轴获取维度 (m)。要计算列数,您将沿着 x 轴获取维度 (n)。

在下面的“测试图像”中,m = 2 和 n = 4。

• 正如上面的评论所说,二维数组是一个矩阵。灰度图像只有一个通道,使其成为二维阵列。 RGB 图像可以有 3 个通道,通向一个第三维为 3 的矩阵。

• 张量图像每个像素提供多个数据样本。张量图像是一个多维数组。我可以想象各种可能利用 RGB、HSV、LUV 色彩空间以及其他更复杂数据的类型。

下面是一个可以说明问题的例子:

Image = imread("Image.png");
%Grabbing the size of the image%
[m,n,h] = size(Image); 

Number_Of_Rows = m;
Number_Of_Columns = n;
Number_Of_Colour_Channels = h;

fprintf("Number of rows (m): %d pixels\n",Number_Of_Rows);
fprintf("Number of columns (n): %d pixels\n",Number_Of_Columns);
fprintf("Number of colour channels: %d channels\n",Number_Of_Colour_Channels);

%Plotting the image%
Figure = figure(1);
imshow(Image);
truesize(Figure);

title('RGB Image');
xlabel(["Number of Columns" num2str(Number_Of_Columns)]);
ylabel(["Number of Rows" num2str(Number_Of_Rows)]);

【讨论】:

  • 感谢您的回答。在图像中,行 m 由 Y 轴和列表示,n 由 X 轴表示。但是在解释中,您提到行m 从左到右延伸-> 这对我来说意味着遍历Y 轴或者您是否打错了行意味着从上到下的错字?水平轴和垂直轴是否颠倒?我的意思是,解释中的X和Y轴和图片不匹配你能澄清一下吗?
  • 我添加了一个图表来澄清。希望这能消除任何误解。图像处理最好用正确的图像来描述。
  • 感谢您的澄清。所以只是为了确认我是否理解正确,(1)行->对应于Y轴和列->X轴? (2)为什么教科书(ece.northwestern.edu/local-apps/matlabhelp/toolbox/images/…)里提到坐标是颠倒的?反转坐标是什么,还是您在答案中解释的那个?在数学中,我们先写 x 坐标,然后写 y 坐标 (x,y),所以x 表示访问水平轴,y 表示vertical axis。在图像中,它似乎颠倒了?
  • 是的,没错。在学术界,通常以 (x,y) 格式表示。这会导致约定被颠倒。通常我在行 (m) 和列 (n) 中工作以避免任何混淆,因为大多数编程语言都遵守这一点。我将创建一个小脚本,您可以使用它来进行实验。
  • 这是我想出来澄清的脚本。它使用一个小网格和一组像素,您可以使用它们进行测试。 github.com/MichaelTr7/StackOverflow/tree/master/…
猜你喜欢
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 2011-09-15
  • 2011-05-10
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多