matlab实现rgb转ycgcr以及rgb转hsi

matlab中自带了rgb转ycbcr的函数rgb2ycbcr.m,但是没有rgb2ycgcr.m,自己根据如下公式实现了该转换,以下代码可参考Github

[ Y C g C r ] = [ 16 128 128 ] + [ 65.481 128.553 24.966 − 81.085 112 − 30.915 112 − 93.768 − 18.214 ] ∗ [ R G B ] \begin{bmatrix} Y \\ C_g \\ C_r \end{bmatrix} = \begin{bmatrix} 16 \\ 128 \\ 128 \end{bmatrix} + \begin{bmatrix} 65.481 & 128.553 & 24.966 \\ -81.085 & 112 & -30.915 \\ 112 & -93.768 & -18.214 \end{bmatrix} * \begin{bmatrix} R \\ G \\ B \end{bmatrix} YCgCr=16128128+65.48181.085112128.55311293.76824.96630.91518.214RGB

代码如下,

function ycgcr = rgb2ycgcr(rgb)
% function ycgcr = rgb2ycgcr(rgb)
% convert rgb image to ycgcr image
% Inputs:
%   rgb    - rgb image
%
% Outputs:
%   ycgcr  - ycgcr image

% reshape image to 2d matrix
rgb = im2double(rgb);
[m, n, p] = size(rgb);
rgb_2d = reshape(rgb, m*n, p);
% convert parameters
origT = [65.481 128.553 24.966;...
     -81.085 112 -30.915; ...
     112 -93.768 -18.214];
origOffset = [16; 128; 128];
origOffset_2d = repmat(origOffset, 1, m*n);
% rgb to ycgcr
ycgcr = origOffset_2d + origT*rgb_2d';
ycgcr = ycgcr';
ycgcr = reshape(ycgcr, m, n, p);
end

同理,matlab中自带了rgb转hsv的函数rgb2hsv.m,但是没有rgb2hsi.m,自己根据如下代码实现了该转换。

function hsi = rgb2hsi(rgb)
% function hsi = rgb2hsi(rgb)
% Convert rgb image to hsi image.
% i = (r + g + b)/3
% s = 1 - min(r, g, b)/i
% h = arccos(0.5*(2r - g - b)/sqrt((r - g)^2 + (r - b)(g - b)))
% Inputs:
%   rgb   - rgb image
%
% Outputs:
%   hsi   - hsi image

% seperate r, g, b
rgb = im2double(rgb);
r = rgb(:, :, 1);
g = rgb(:, :, 2);
b = rgb(:, :, 3);

% implement the conversion
i = (r + g + b)/3;
s = 1 - (min(min(r, g), b)./i);
h = acos(0.5*(2*r - g - b)./sqrt((r - g).^2 + (r - b).*(g - b)));

% concatenate h, s, i
hsi = cat(3, h, s, i);
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值