YUVからRGBへの色空間変換とワークフローについて

このQ&Aのポイント
  • YUVからRGBへの色空間変換について詳しく解説します。
  • 色空間変換時に生じる信号の変化や情報の欠落について検討します。
  • YUV→RGB→YUVの受け渡しを正確に行うためのワークフローについて紹介します。
回答を見る
  • ベストアンサー

YUVからRGBへの色空間

QuickTimeベースのシステムで、ソースは問いませんが(例えばデジベから)取り込んでできたQuickTimeのファイルにはIREの-10~110%の信号が生きているとします。これをRGBベースのコンポジットソフトに渡すさいにRGBの連番に変換が必要となっています。 普通にAfterEffectsなどで、連番書き出しした時に-10~110%の信号は連番になっても生きているのでしょうか? 変換時に丸め込まれて0~16/235~255の省略されて 16~235の情報が0~255に引き延ばされてしまうのでしょうか? またそうなってしまはないようにキッチリと YUV→RGB→YUVの受け渡しをしたい場合どういったワークフローを組めば可能となるのでしょうか? 教えていただければ、非常に助かります。

noname#150999
noname#150999

質問者が選んだベストアンサー

  • ベストアンサー
  • sinn-te
  • ベストアンサー率52% (21/40)
回答No.1

デジベからの取り込み機器がキーになると思います。 民生用の場合は 頭削りの引き伸ばしになると思うのですが 業務用のキャプチャーボードの場合 多階調の情報を取り込める10Bitタイプになっていると思います。 これらのボードを使いRGB8:8:8(24Bit)ではなく RGB16:16:16(48Bit)形式対応のフォーマットで取り込むか YUVソースのまま取り込めるフォーマットを利用していれば ファイル自体は、データソースと同等のクオリティを維持していると 考えても良いと思います。(取り込みにデジタルを使用していれば) ソフトの方は、RGBベースでハイビットをサポートしている物が 必要になりますが(AfterEffectPro等)それらを用いれば データのクオリティも維持できる筈です。 AfterEffectのスタンダードやPremiereでは 24Bit以上のカラーは(多分)サポートされていないので クオリティの維持は無理になります。 (最もAfterEffectPro作業がキツイと思いますが)

関連するQ&A

  • YUV⇔RGB変換がうまくいきません。

    24bppRaw(R,G,Bの順番)を以下の式でYUVに変換します。 layer[i+j]がRでlayer[i+j+1]がGでlayer[i+j+2]がBです。 Y=(unsigned char)(0.257*layer[i+j]+0.504*layer[i+j+1]+0.098*layer[i+j+2]+16); U=(unsigned char)(-0.148*layer[i+j]-0.291*layer[i+j+1]+0.439*layer[i+j+2]+128); V=(unsigned char)(0.439*layer[i+j]-0.368*layer[i+j+1]-0.071*layer[i+j+2]+128); そのあとにYUVをRGBのrawに以下の式で変換します。 Y=layer[i+j]; U=layer[i+j+1]-128; V=layer[i+j+2]-128; R=(unsigned char)(1.164*(Y-16)+1.596*V); B=(unsigned char)(1.164*(Y-16)+2.018*U); G=(unsigned char)(1.164*(Y-16)-0.391*U-0.813*V); しかし元のRGBにはならず画像がおかしくなります。 もちろんオーバーフロー、アンダーフローなどは丸めています。 どのような式を用いれば、RGB⇔YUV 相互変換ができるのが ご教授ください。もう半年くらい随分迷っています。 ダイレクトに式だけ提示いただけるだけで結構なので よろしくおねがいいたしますm(___)m 参考HP http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html http://www.sm.rim.or.jp/~shishido/yuv.html

  • ビデオ信号の種類について

    ビデオ信号の種類について アナログビデオ信号には、RGB、コンポーネント、コンポジットなどがありますが、以下のような認識で問題ないでしょうか。 ・RGBとコンポーネントは世界共通。 ・コンポーネントは、RGBをコンポジットに変換する過程でできる。 ・コンポジットにはNTSC、PAL、SECAMの3種類がる。 ・日本で、黄色い端子の中を流れているのはNTSCコンポジット信号

  • コンポジットビデオ信号の変換チップ

    コンポジットビデオ信号(1.0Vp-p 75Ω不平衡)の信号をRGB 8bitパラレル信号とH/V sync 信号に変換するチップ(IC)ご存知ありませんか? 変換ユニットでコンポジットビデオ信号をいろんなフォーマットに変換するものはあり ますが、上記RGB パラレル8bitのI/Fで用意されているLCDパネルを使ってコンポジット ビデオ信号を映したい。 ついでに、LCDパネルでCPU I/F信号(16bit/8bit)対応のタイプもあるのですが、この タイプを使うときはAD変換して16bitパラレルにして使うのでしょうか?変換するチップが何処からかリリースされているのでしょうか? 情報頂けると助かります。

  • MatlabによるRGB空間からYUV空間への変更について.

    現在Matlabを勉強中の者です. 160*120ピクセルの画像の色空間を RGBからYUV(YCbCr)へ変換するプログラムを考えているのですが, 以下のソースコードで大まかな点はあっているでしょうか? 実際にYUVへ変換後,画像を表示したところ, 元画像とは色調が変わってしまい頭を抱えています. 画像を表示する際のカラーマップに問題があるのでしょうか. ご教授お願い致します. % 画像ファイルの読込 pictureRgb = imread('./data/gazou0.bmp'); pictureYcbcr = imread('./data/gazou0.bmp'); % YCbCr空間(フルレンジ)への変換 pictureYcbcr(:,:,1) = uint8(0.257 * double(pictureRgb(:,:,1)) + 0.504 * double(pictureRgb(:,:,2))... + 0.098 * double(pictureRgb(:,:,3))+16.0); pictureYcbcr(:,:,2) = uint8(-0.148 * double(pictureRgb(:,:,1)) - 0.291 * double(pictureRgb(:,:,2))... + 0.439 * double(pictureRgb(:,:,3))+128.0); pictureYcbcr(:,:,3) = uint8(0.439 * double(pictureRgb(:,:,1)) - 0.368 * double(pictureRgb(:,:,2))... + 0.071 * double(pictureRgb(:,:,3))+128.0); %R成分の表示 subplot(3,3,1); image(pictureRgb(:,:,1)); axis image; axis off; title('R 成分'); %G成分の表示 subplot(3,3,2); image(pictureRgb(:,:,2)); axis image; axis off; title('G 成分'); %B成分の表示 subplot(3,3,3); image(pictureRgb(:,:,3)); axis image; axis off; title('B 成分'); %--------------------------- %Y成分の表示 subplot(3,3,4); image(pictureYcbcr(:,:,1)); axis image; axis off; title('Y 成分'); %Cb成分の表示 subplot(3,3,5); image(pictureYcbcr(:,:,2)); axis image; axis off; title('Cb成分'); %Cr成分の表示 subplot(3,3,6); image(pictureYcbcr(:,:,3)); axis image; axis off; title('Cr成分'); %--------------------------- %原画像の表示 subplot(3,3,7); image(pictureRgb); axis image; axis off; title('元画像'); %YUV画像の表示 subplot(3,3,8); image(pictureYcbcr); axis image; axis off; title('YUV画像');

  • 古いビデオの画面を安定させるには?

    ●古いビデオ(VHS)のコンポジット信号を  パソコンでMPEGに変換しているのですが  ところどころ繋ぎ目で画像が消えてしまいます。  タイムベースコレクターのような画像を安定させる  安価なハードがございましたらご紹介ください。  また 安定して変換できるソフトなどございましたら  教えてください。  よろしくお願いいたします。

  • RBG(TTL)映像信号をコンポジット映像信号に変換

    90年代前半の品物で、機器からの映像出力がRGB-TTL(9pin端子)です。ちなみにもう一つの出力方法としてBNC端子(R/G/Bの3つ)もあります。 それを最近のTVに入力したいのですが…。 コンポジット映像信号(RCA端子)に変換・使用する方法ってありますか? 恥ずかしながらその面では全くの無知野郎なので優しくお願いします。

  • PC用のモニタをTVとして使おうと思ったのですが

    PC用のモニタをTVとして使おうと思ったのですが 出力側の地デジチューナーには コンポジット出力(RCAピン)端子しかありません 取説によるとモニタ側の入力信号の欄に アナログRGB(Mini D-sub 1.5)、デジタルTMDS(DVI-D)、 HDMI端子と記載されていますが 両者をつなぐ方法はあるでしょうか 変換コネクタ等有れば製品名(番号)等教えてください よろしくお願いします

  • YUVとRGBを調べるフリーソフトは?

    OSはビスタ(又は7)なんですが 動画ファイルがYUV(YV12)かRGBなのかを調べる フリーソフトを探してます と言うのは、ある動画ファイルを『aviutl』で可逆圧縮で出力すると 「Xvid MPEG-4」で出力したのと変らない位に劣化してるんです ちなみに『VirtualDubMod』でも調べられると知りましたが このソフトは初期設定だとaviしか読み取れず 更に、他の拡張子を入れたい場合は 専用のコーディックが必要だと知りましたが そのコーディックをアップしてる所が見つかりませんでした

  • RGB→YUV変換のプログラム

    RGB→YUV変換を行っているのですが、 うまくいきません。 以下であっているのでしょうか? //RGB > YUV変換 void RGBtoYUV(char *filename,int width,int height) { FILE *fpt,*fpt_output; unsigned char *Input,*head; unsigned char Y=0,U=0,V=0; int i,j,b_flag=1; int modification=0; modification=width%4; //ファイルのオープン fopen_s(&fpt,filename,"rb"); if(fpt==NULL) { char DebugStr[256]; wsprintf(DebugStr,"%sが存在しません",filename); MessageBox(NULL,DebugStr,"File Error",MB_OK); } else { fopen_s(&fpt_output,"YUV.bmp","wb"); //ヘッダ情報の書き込み head=(unsigned char*)malloc(54); fread(head,sizeof(unsigned char),54,fpt); fwrite(head,sizeof(unsigned char),54,fpt_output); free(head); Input=(unsigned char*)malloc(3*width*height*sizeof(unsigned char)); //メモリに展開 for(i=0;i<height;i++) { fread(&Input[i*(3*width)],sizeof(unsigned char),3*width,fpt); fseek(fpt,modification,SEEK_CUR); } fclose(fpt);//Inputファイルのクローズ for(i=0;i<3*width*height;i+=3*width) { for(j=0;j<3*width;j+=3) { Y=(unsigned char)(0.299*Input[i+j+2]+0.587*Input[i+j+1]+0.114*Input[i+j]); U=(unsigned char)(-0.169*Input[i+j+2]-0.3316*Input[i+j+1]+0.500*Input[i+j]); V=(unsigned char)(0.500*Input[i+j+2]-0.4186*Input[i+j+1]-0.0813*Input[i+j]); //Y if(Y<0) { Input[i+j]=0x00; } else if(Y>255) { Input[i+j]=0xff; } else { Input[i+j]=Y; } //U if(U<0) { Input[i+j+1]=0x00; } else if(U>255) { Input[i+j+1]=0xff; } else { Input[i+j+1]=U; } //V if(V<0) { Input[i+j+2]=0x00; } else if(V>255) { Input[i+j+2]=0xff; } else { Input[i+j+2]=V; } } }//i fseek(fpt_output,54,SEEK_SET); for(i=0;i<height;i++) { fwrite(&Input[3*width*i],sizeof(unsigned char),3*width,fpt_output); //修正値の代入 for(j=0;j<modification;j++) { fwrite("\x000",sizeof(unsigned char),1,fpt_output); } } fclose(fpt_output); free(Input); } } 又 YUV→RGBにすると元の画像に戻らずに困っています。 プログラムに対するご指摘お願いします。 このプログラムはWindowGUIで幅と高さとファイル名を入力して 走らせるプログラムです。24bpp BMPが対象です。

  • 色んな物をHDMIに変換したい

    最近のテレビやディスプレイはHDMIがほぼ必ず付いています。 その点昔のゲーム機やVHSなどは、アナログ映像が一般でした。 一応コンポジット映像をHDMIに変換するアダプタは時折目にします。 問題はそれ以上のものをまず目にしないことです。 こんなアナログ入力がHDMIに変換できると便利です。 ・S映像 ・コンポーネント映像 ・D端子映像(コンポーネントと中は一緒だけど) ・RGBマルチ21ピン映像 昔のVHS、ゲーム機などを、コンポジット映像よりもより高画質に表示するために結構使われましたね。 だからこの映像を無劣化で今のディスプレイに表示させられればどんなに良いかと思います。 なぜこういうものがないのでしょうかね? 逆に、HDMIをコンポジット映像やVGAアナログにダウンさせるアダプタはいっぱい見ます。 こっちこそ今頃そんな端子が必須な機材は思い当たらないですし需要が無い気がするのですけどね。 ソース側は古い規格のものを再生するのに必要ですが、シンク側はどんどん買い換えるので、必要なのはあらゆる下位の映像信号をHDMIにするアダプタだと思います。 需要ありさげなのになぜ無いのでしょう? VHSもまだ見る可能性はあると思いますし、この前我が家のPS2とWiiを起動してみたら、少なくともこの2台は正常に起動しました。 まだ遊びたいのに、テレビが買い替えできません。 D端子がなくなってしまいます。