【发布时间】:2018-08-31 11:41:57
【问题描述】:
所以我需要做的是应用像
这样的操作(x(i,j)-min(x)) / max(x(i,j)-min(x))
它基本上将每个像素值转换为介于 0 和 1 之间的值。
首先,我意识到 Matlab 使用 imread 将我们的图像(行 * 列 * 颜色)保存在 3D 矩阵中,
Image = imread('image.jpg')
所以,对图像进行简单的最大操作并没有给我像素的最大值,我不太确定它返回什么(另一个多维数组?)。所以我尝试使用类似的东西
max_pixel = max(max(max(Image)))
我认为它工作得很好。同样,我使用了 min 三次。我的逻辑是我得到了所有 3 个颜色平面的最小像素值。
执行上述缩放操作后,我得到的图像似乎只有 0 或 1 个值,中间没有任何值,这似乎不正确。它与整数/浮点数舍入有关吗?
image = imread('cat.jpg')
maxI = max(max(max(image)))
minI = min(min(min(image)))
new_image = ((I-minI)./max(I-minI))
这给出了只有 1 和 0 的输出,这似乎不正确。
我正在尝试的另一种方法是像 here 那样分别处理所有颜色平面。但这是正确的做法吗?
我也可以循环遍历所有像素,但我认为这需要时间。对此非常陌生,任何帮助都会很棒。
【问题讨论】:
-
没有示例就不清楚,但似乎您想使用
dim参数到max/min,如文档中所述。另外我认为你的第一个方程中分数的底部应该是(max(x)-min(x)),取(x-min(x))的最大值不会标准化0到1之间的数据。跨度> -
@wolfie x(i,j)-min(x) 将使最小像素的值为 0,而所有其他像素将具有一些值,例如其中的最大值为 y,现在除以 max( x(i,j)-min(x)) 表示除以 y,因此像素的最大值变为 1。不是吗?我应该提供什么样的例子?你是说代码吗?非常感谢。
-
您的图像是如何生成的?如果它已经是 RGB,那么它不是“数据矩阵”,它是某物的颜色表示。这意味着它要么是 0-255、0-1,要么可能是错误生成的。
-
@AnderBiguri 所以我使用 imread 读取图像..它给出的输出值范围为
0-255。size(image)也给出了375 500 3,这意味着我认为它是 RGB。当我使用red = image(:,:,1)然后size(red)我得到375 500。