作者doom8199 (~口卡口卡 修~)
看板MATLAB
标题Re: [问题] RGB转出灰阶图
时间Sat Jul 7 13:37:01 2012
※ 引述《jeff126f (jeff)》之铭言:
: 小弟目前在做一些影像对比增强的实验
: 因为需要将彩色图片做一些处理
: 想请问
: 1.
: 原本我利用rgb2gray(image)将RGB影像的灰阶直取出
: (公式应该是Y = 0.299R + 0.587G + 0.114B)
: 因为要对灰阶处理
: 再转回彩色图片
: 所以需要保留色彩资料
: 使用YCbCr色域
: rgb2YCbCr(image)
: 但取出的Y值却与rgb2gray(image)不同
: 那哪个才是对的灰阶值
都是正确的灰阶值 ( 或 Luminance )
差别在於 matlab 它在 YCbCr 上有做过一些数值上的调整 (请自行 help)
毕竟 YCbCr 它不是一个标准色彩空间
所以会有很多种定义版本
因此若你想转到 YUV domain 上处理
建议自己写一个 I/O 转换
不要使用 matlab 提供的函数
: 2.
: 我利用f= rgb2YCbCr(image)之後
: imshow(f);
: 结果显示图片的颜色
: 原本黄的地方变偏紫色
: 黑的地方变成偏绿色
: 在转回去RGB并显示图片却又正常
: ( image_new=YCbCr2rgb(f);
: imshow(image_new); )
: 请问是哪个地方出错了
: 谢谢大家解答了
用 imshow(f) 本来就不对 = =lll
f 他是 yuv format, 不是 rgb format
imshow(.) 是让你 display 出 rgb (或 gray level) 的图
这就好比像是吃东西的时候, 要使用正确的工具来吃当下的东西
例如 吃饭要用汤匙或筷子、吃牛排要用刀叉、用吸管喝饮料
可是你会用刀叉吃饭、用吸管吃牛排吗 XD?
当然若你想把 f 的资讯直接秀出来
可以上网抓 yuv display 程式来播放
但还是强调一下, 不要使用 matlab 提供的函式
它跟一般标准使用的 range 不太一样 ~~
除非你很清楚每个转换函式之间的关系为何
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.211.139
1F:→ jeff126f:之前学长在教学的时候就说要show出图片就用imshow = = 07/07 22:49
2F:→ jeff126f:所以完全不知道他是RGB形式 总算解决了 谢谢~ 07/07 22:50