让我先说一下,我知道有些功能会为我做这件事,但我想手动完成,所以我可以理解这里到底发生了什么。
所以我的目标是读取RGB图像并将其转换为灰度图像。到目前为止,我所有的图像处理工作都是基于灰度的,所以我有点迷失。
我试图通过
首先阅读图像fid = fopen('color.raw');
myimage = imread(fid, [512 384], 'uint8');
fclose(fid);
但myimage最终为空0 x 0矩阵。我想我需要为每个像素分配一个“R”“G”和“B”值,从而为每个像素赋予三种颜色三个值,但我不确定这是否正确,甚至如何尝试。< / p>
我的问题如下:如何读取RGB图像然后变成灰度图像。
编辑:所以我理解在获得R G和B值后如何将RGB转换为灰度,但我似乎无法在图像中读取Matlab,任何人都可以提供任何帮助吗?使用imread似乎最有意义,但
[pathname] = ...
uigetfile({'*.raw';'*.mdl';'*.mat';'*.*'},'File Selector');
fid = fopen(pathname);
myimage = imread(fid);
fclose(fid);
不工作,我为fopen收到无效文件名错误,我真的不明白为什么。
答案 0 :(得分:3)
从概念上讲,您只需对红色,绿色和蓝色组件求平均值,然后将该平均值作为红色,绿色和蓝色组件的输出。您可以使用简单的算术平均值
来完成此操作或者对于踢腿,你可以使用几何平均值来获得略微不同的对比度。
答案 1 :(得分:3)
imread - 从图形文件中读取图像(在文档中) http://www.mathworks.com/help/matlab/ref/imread.html
对于RGB到灰度,使用亮度方法。 http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/
发光度方法是平均值的更复杂版本 方法。它还对值进行平均,但它形成加权平均值 考虑到人类的感知。我们对绿色比对绿色更敏感 其他颜色,所以绿色加权最重。的公式 发光度为0.21 R + 0.71 G + 0.07 B。
答案 2 :(得分:2)
其他用户表示平均所有3个值的问题在于,这根本不是我们眼睛的工作方式。
平均图像时,会得到下面的结果(在内置的peppers.png图像上)
当您找到平均值时,您实际上正在做grayImg = .33 * R + .33 * G + .33 * B,现在将其与MATLAB计算灰度值的方式进行比较(考虑人类如何查看图像)
0.2989 * R + 0.5870 * G + 0.1140 * B
看到价值观的鲜明对比?
要获得更好看的数据,请更接近MATLAB使用的系数:)
MATLAB渲染它的方式如下: