首页 > 行业资讯 > 如何在matlab中实现RGB值与整数值之间的转换?

如何在matlab中实现RGB值与整数值之间的转换?

时间:2022-08-01 来源: 浏览:

如何在matlab中实现RGB值与整数值之间的转换?

原创 巴山 懂科学的程序员
懂科学的程序员

ScientificProgrammer

一只爱好编程的科研狗,如MATLAB,Python,C/C++与Perl脚本等!

收录于合集
#matlab 16
#技术交流 11
#开源 2

开始正文之前,讲几句题外话,咱又重新回到了知乎,知乎账号名称与公众号名称一致,都叫 懂科学的程序员 。知乎账号分享的内容将更加灵活多样,任何想给大家分享的内容都会在知乎上给大家分享,而公众号将侧重于编程内容的分享。 尽量不炒冷饭,把公众号的内容搬到知乎,或把知乎内容搬到公众号 。此外,公众号将正式启用GitHub作为分享代码的仓库,地址如下:

github.com/ScientificProgrammerOwner.  今后的 懂科学的程序员 所属账号所公开分享的代码都将上传至GitHub,也希望有GitHub账号的多多去给 ScientificProgrammer 点赞加星。

咱也注意到自从公众号改名以来,这几天的关注量都是负的。在此也再给大家说明一下, 公众号仅仅是换了个名称而已,并不存在转让给其他任何第三方运营的事情,咱依旧是matlab爱好者,希望伙伴们能够继续支持“懂科学的程序员”

言归正传,之前的学习中遇到了需要将整数值转换为RGB值的情况,于是就用matlab写了这么一个小脚本,可实现RGB与整数值之间得相互转换 ( PS: 这种方法可以应用到加密领域哦,其实本质上是一种256进制与十进制的相互转换 ) RGB到整数值相对容易些,使用如下公式即可完成转换:

 

 

而整数值到RGB的转换则需要一点小技巧,从公式(1)中不难看出,整数 DEC 若对256求余,则可直接得到 B ,即有:

 

 

由(2)求出 B 之后,此时将 DECB 的差值作为整体来看待,则有:

 

 

可以看出,将(3)式两边同时除以256,则变成与(1)类似的式子,即:

 

 

让(4)左边对256求余即可得出 G ,如下:

 

 

现已知 DECB 以及 G ,由(1)式即可得出 R 的值,即:

 

 

本文给出rgb2dec的源代码,完整源代码请点击左下角 阅读原文 到咱的GitHub仓库下载:

function rgb = dec2rgb(dec) %{ Features: Converting decimal integers to rgb values. Formula 1 : dec = 256 ^ 2 *R + 256 *G + B; ⟹ B = dec mod 256 C−B = 256 ^ 2 *R+ 256 *G ⟹ (C−B)/ 256 = 256 R+G ⟹ G ≡ (C−B)/ 256 mod 256 And then: (C−B)/ 256 −G = 256 *R ⟹ R = (C−B)/ 256 ^ 2 − G/ 256. Input: decimal integers Output: rgb values. Ref.: https: //math.stackexchange.com/questions/1635999/algorithm-to-convert-integer-to-3-variables-rgb Online tool: https: //www.checkyourmath.com/convert/color/rgb_decimal.php Author(作者): 巴山(bashan) WeChat Official Account ( 微信公众号 ): 懂科学的程序员( ScientificProgrammer )     Github: https: //github.com/ScientificProgrammerOwner ZhiHu ( 知乎 ): https: //www.zhihu.com/people/67-93-61-26-8 BiliBili ( B站 ): https: //space.bilibili.com/205153905 Welcome to subscribe! 欢迎订阅! %} try validateattributes ( dec,{ ’numeric’ },{ ’row’ , ’>=’ , 0 , ’<=’ , 16777215 , ’integer’ } ) ; catch validateattributes ( dec,{ ’numeric’ },{ ’column’ , ’>=’ , 0 , ’<=’ , 16777215 , ’integer’ } ) ; end rgb ( :, 3 ) = mod(dec, 256 ); % B rgb ( :, 2 ) = mod(fix((dec-rgb( 3 ))/ 256 ), 256 ); % G rgb ( :, 1 ) = fix((dec-rgb( 3 ))/ 65536 ) - fix(rgb( 2 )/ 256 ); % R

以下是相应的转换示例:
例1:多组rgb转整数值

rgb2 = [1 2 3;4 5 6;7 8 9;10 11 12]; dec2 = rgb2dec(rgb2) dec2 = 66051 263430 460809 658188

例2:多组单R/G/B转整数值

R2 = [1 4 7 10]; G2 = [2 5 8 11]; B2 = [3 6 9 12]; dec4 = rgb2dec(R2,G2,B2) dec4 = 66051 263430 460809 658188

例3:多组整数转RGB值

dec6 = [66051 263430 460809 658188]; rgb2 = dec2rgb(dec6) rgb2 = 1 2 3 4 5 6 7 8 9 10 11 12

当然,如果伙伴想用在线版,可访问checkyourmath提供的在线转换工具,链接如下: checkyourmath.com/convert/color/rgb_decimal.php.

若有问题,欢迎留言讨论!关注支持一下也不错哦!
特别鸣谢:本文采用ciaochaos开发的mpMath工具插入公式,在此对作者的辛勤付出深表感谢!(链接: github.com/ciaochaos/mpMath)

参考资料:

[1] math.stackexchange.com/questions/1635999/algorithm-to-convert-integer-to-3-variables-rgb

如需转载,请在公众号中回复“ 转载 ”获取授权,如未经授权擅自搬运抄袭的,本公众号将保留一切追责权利!

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐