用MATLAB 怎么把YCbCr颜色空间的亮度分离啊?

作者&投稿:胥饱 (若有异议请与网页底部的电邮联系)
求RGB转YCbCr颜色空间的matlab代码~

Y= 0.257*R + 0.504*G + 0.098*B + 16;
Cb = -0.148*R - 0.291*G+ 0.439*B + 128;
Cr = 0.439*R - 0.368*G - 0.071*B + 128;

Y = floor(Y+0.5); %四舍五入,取整
Cr = floor(Cr+0.5);
Cb = floor(Cb+0.5);

下面是转换回去的公式,验证是否转换正确,数据是否有损失。
R = 1.164*(Y-16) + 1.596*(Cr-128);
G = 1.164*(Y-16) - 0.813*(Cr-128) - 0.392*(Cb-128);
B = 1.164*(Y-16) + 2.017*(Cb-128);

直接在Cr矩阵里找出符合条件的点就行了啊

/**
*颜色选择器颜色转换算法类
*<p>Copyright: langzisoft 13/10/2004</p>
* 山东大学计算机系
* @author 邵建
* @version 1.0
**/

import java.lang.Math;
import java.awt.*;

public class ColorConverter{

public ColorConverter(){
}

//RGB转换CMYk
public int[] rgb2cmyk(int R,int G,int B){
int cmyk []= new int[4];
cmyk[3]=(int)(Math.min(Math.min(255-R,255-G),255-B)/2.55);//cmykK
int MyR = (int)(R/2.55);
int Div = 100-cmyk[3];
if (Div == 0)Div = 1;
cmyk[0] = ((100-MyR-cmyk[3])/Div)*100;//cmykC
int MyG = (int)(G/2.55);
cmyk[1] = ((100-MyG-cmyk[3])/Div)*100;
int MyB = (int)(B/2.55);
cmyk[2] = ((100-MyB-cmyk[3])/Div)*100;

return cmyk;
}
public Color cmyk2rgb(int C,int M,int Y,int K){
float MyC = C/100;
float MyM = M/100;
float MyY = Y/100;
float MyK = K/100;

int R = (int)((1-(MyC*(1-MyK)+MyK))*255);
int G = (int)((1-(MyM*(1-MyK)+MyK))*255);
int B = (int)((1-(MyY*(1-MyK)+MyK))*255);

if (R<0) R=0;
if (G<0) G=0;
if (B<0) B=0;
if (R>255) R=255;
if (G>255) G=255;
if (B>255) B=255;

Color rgb = new Color(R,G,B);
return rgb;
}

public int[] rgb2yuv(int R,int G,int B){

int yuv[] = new int[3];
yuv[0] =(int)(0.299*R+0.587*G+0.114*B);
yuv[1] = (int)(-0.147*R-0.289*G+0.437*B);
yuv[2] = (int)(0.615*R-0.515*G-0.1*B);
return yuv;
}
public Color yuv2rgb(int y,int u,int v){

int R = (int)(y+1.14*v);
int G = (int)(y-0.394*u-0.581*v);
int B = (int)(y+2.028*u);
if (R<0) R=0;
if (G<0) G=0;
if (B<0) B=0;
if (R>255) R=255;
if (G>255) G=255;
if (B>255) B=255;

Color rgb=new Color(R,G,B);
return rgb;
}
public int[] rgb2yiq(int R,int G,int B){

int yiq[] = new int[3];
yiq[0] = (int)(0.299*R+0.587*G+0.114*B);
yiq[1] = (int)(0.596*R-0.274*G-0.322*B);
yiq[2] = (int)(0.212*R-0.523*G+0.311*B);
return yiq;
}
public Color yiq2rgb(float y,float i,float q){

int R = (int)(y+0.956*i+0.621*q);
int G = (int)(y-0.272*i-0.647*q);
int B = (int)(y-1.105*i+1.702*q);

if (R<0) R=0;
if (G<0) G=0;
if (B<0) B=0;
if (R>255) R=255;
if (G>255) G=255;
if (B>255) B=255;

Color rgb = new Color(R,G,B);
return rgb;
}

//RGB转换YCbCr
public int[] rgb2ycbcr(int R, int G,int B){

int ycbcr[] = new int[3];
ycbcr[0] = (int)(0.299*R+0.587*G+0.114*B);
ycbcr[1] = (int)(-0.1687*R-0.3313*G+0.5*B+128);
if (ycbcr[1] > 255) ycbcr[1] = 255;
ycbcr[2] = (int)(0.5*R-0.4187*G-0.0813*B+128);
if (ycbcr[2] > 255) ycbcr[2] = 255;

return ycbcr;
}
public Color ycbcr2rgb(int Y,int Cb,int Cr){
int MyR = (int)(Y + 1.402 * (Cr -128));
int MyG = (int)(Y - 0.34414 * (Cb - 128) - 0.71414 * (Cr - 128));
int MyB = (int)(Y + 1.772 * (Cb -128));

if (MyR > 255) MyR = 255;
if (MyG > 255) MyG = 255;
if (MyB > 255) MyB = 255;

if (MyR < 0) MyR =0;
if (MyG < 0) MyG =0;
if (MyB < 0) MyB =0;

Color rgb = new Color(MyR,MyG,MyB);
return rgb;
}
}


日喀则市17051145344: 用MATLAB 怎么把YCbCr颜色空间的亮度分离啊? -
移叔氢溴: /** *颜色选择器颜色转换算法类 *<p>Copyright: langzisoft 13/10/2004</p> * 山东大学计算机系 * @author 邵建 * @version 1.0 **/import java.lang.Math; import java.awt.*;public class ColorConverter{public ColorConverter(){ }//RGB转换CMYk ...

日喀则市17051145344: Matlab语言怎么把数字变字母? -
移叔氢溴: 第一步在我们的电脑上打开matlab命令行窗口,输入“a=num2str(123)”,将数字123转换成字符串'123', 2. 第二步按回车键之后,可以看到得到了字符串123, 3. 第三步有时候我们需要将数字转换成特定的字符串格式,如1到001,输入“a=num2str(1,'%03d')”,其中3是控制位数的, END

日喀则市17051145344: 怎么将matlab命令保存为M文档 -
移叔氢溴: 1、打开电脑上的“matlab”软件,主界面如下图所示. 2、点击箭头处的“新建”按钮. 3、接着点击新建栏目下的“脚本”,新建一个脚本文件.zhidao 4、在新建的脚回本里,输入代码,此处绘制sinx的函数图像,点击保存答. 5、保存函数,下面输入函数文件名,保存类型为*.m. 6、输入文件名后,点击下方的“保存”按钮,可以看到保存好的m文件. 7、接着点击箭头处的“运行”按钮,运行这个函数文件. 8、函数文件运行结果如下图所示,可以看到绘制好的图像.

日喀则市17051145344: matlab怎么用来画电路图 -
移叔氢溴: 1、打开MATLAB ,在“新建”里新建一个Simulink Model,这个是画电路的模块面板. 2、打开Simulink库,如图中红色标出的,两个都可以,在Simulink库中有要的器件 3、把找到的器件连好图,Ctrl+R可以旋转选中对象,双击器件可以设置器件, 4、打开示波器,就是器件中的Scope,再按上方的四个小黑箭头的正方形,在打开后就可以了,可以鼠标选中放大区域观察.

日喀则市17051145344: 现在有100个左右csv格式文件,如何用matlab依次读取文件,提取所需要的列并且按列输出至txt文本中呢? -
移叔氢溴: 建议使用dir函数A=dir('*.csv') 这样就可以把所有csv格式文件的名称读进来,然后就可以使用循环一次读取文件并处理!

日喀则市17051145344: matlab怎样将数据存为二进制 -
移叔氢溴: 1.matlab: fid=fopen("bif.bin","wb"); fwrite(fid,A','double');%A是矩阵,double是保存文件的数据类型.A'是A的转置,原因是,在matlab中数据是按列存放,c中是按行.所以在matlab中应先进行转置,这样 %到c中读出的数据才是正确的.

日喀则市17051145344: matlab gui怎样将计算结果输出成文件? -
移叔氢溴: 1、在Matlab的命令窗口中输入命令: mbuild -setup根据提示及自己电脑上所装软件的实际情况,一步步完成选择,初次要这一步进行设置,以后就不用了.2、在Matlab的命令窗口中输入命令: mcc -m gui.m生成gui.exe、gui.ctf、...

日喀则市17051145344: 怎么用MATLAB程序求转置矩阵?急需,高手帮忙……………… -
移叔氢溴: 在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=f31(x) f=1./[(x-2).^2+0.1]+1./[(x-3).^4+0.01]; %%%%%%%%%...

日喀则市17051145344: 我从属性里找到了YData,可是我怎么将它用在matlab里,就是数据导不出来,谢谢您啊. -
移叔氢溴: 终于找到了..hfigure=plot(t);%figure句柄%换图的时候执行以下3行 haxes=get(hfigure,'children'); haxes=get(haxes(1),'children')%坐标轴 y=get(haxes,'ydata'); %结果

日喀则市17051145344: MATLAB如何把计算出来的多项式输出? -
移叔氢溴: 比如我们输出一个函数f=A*sin(x)-B*exp(C*x)这种表达式,A,B,C是你输入的任何参数.(1)你写上如下代码的M文件function f=dispf(A,B,C)syms x;f=A*sin(x)-B*exp(C*x);end(2)现在你直...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网