本書は著作物であり，著作権法により保護されています．
本書の一部，または全部を著作権者に断りな
く，複製または改変し他人に譲渡すること，
インターネットなどに公開することは法律により固く禁止されています．
違反した場合は，民事上の制裁および刑事罰の対象となることがあります．

前書き2011 年，日本におけるアナログ・テレビ放送が地上波，BS 共に打ち切られる．60 年近い歴史が幕を閉じ，代わってディジタル・テレビ放送が主役の座を奪う．ディジタル方式の本格的普及は，CS
ディジタル放送が開始され，DVD が登場した 90 年代中旬に始まった．このディジタル化の波は，
2000 年の BS ディジタル放送，2003 年の地上デジタル放送の開始によって一気に加速した．これと並行して，写真の世界では大手カメラ・メーカがフィルム・カメラ事業の縮小や新規開発の中止を表明
とりでしている．アナログ映像情報メディア最後の砦といっても良い映画の世界でも，撮影，編集，配給，上映のすべてをディジタルで行うディジタル・シネマが準備を整え，普及を待つばかりである．
ビデオ・カメラの世界では電子ビーム系の時代は終わり，CCD や CMOS などの固体素子デバイスが世を席巻している．表示機器についてもブラウン管（CRT）はその役割を終え，薄型化に有利なプ
ラズマ・ディスプレイ・パネル（PDP）や液晶ディスプレイ（LCD）が世界の市場をにぎわせ，し烈な争いを繰り広げている．新たな技術はいずれも画素単位で映像を制御するため，ディジタル方式になじみやすい．
HD-DVD や Blu-ray Disk の登場，ハード・ディスクやフラッシュ ROM の大容量化，ブロードバン
ド/ワイヤレス・ネットワークの普及は，ディジタル画像・映像情報の発展と相互に作用している．
まさに，ディジタル隆盛の時代といえる．一方で，劣化が少なく複製や加工が容易であるという
ディジタル方式の利点がコンテンツ制作・配給者を悩ます一面もある．著作権やセキュリティの問題である．これらの対策も，重要な課題として活発に研究開発が進められている．
従来，放送やパッケージ・メディアなどの 1 対多の関係にある応用が画像・映像信号処理技術の発展をけん引してきた．次世代においては，多対 1，多対多の関係にあるビデオ・センサ・ネットワー
クが新しい技術の創造を要求することは間違いない．医療福祉，防災減災，監視や環境モニタリン
グなど，その応用にも期待が膨らむ．
このように話題に事欠かない状況の中，画像・映像信号処理に携わる研究開発技術者の社会的な役割はますます重要となり，多くの人材が必要とされている．幅広い技術要求に対応するため，各人が基礎知識を身につけ，適切な処理を直感的に設計・選択できる能力を備えることが望まれる．
本書では，ディジタル画像・映像信号処理を学ぶ上で最低限必要な線形システムと周波数解析の理解に重点を置いた．第 7 章までは，初学者が身に付けるべき基礎知識を簡単な例題と共に解説した．
対象とする読者は，高専生や学部学生を主としている．第 8 章以降は，1 次元と多次元の違いを理論と直感で学べるように配慮した．多次元のフィルタ設計やマルチレート信号処理など，高度な内容も含まれる．対象とする読者は，画像・映像信号処理に携わる大学院生や若手研究開発者を主としている．
本文中，解説があいまいにならないようになるべく数式を添えた．さらに，直感的な解釈が可能なように MATLAB プログラムとその実行例を豊富に掲載した．MATLAB は初学者でも高度なプログラムを簡単に実現可能とする．反面，知識がなくても結果が得られてしまう恐れがある．そこで，
2

前書き筆者から読者へお願いがある．本書を読み進める際，結果に対する考察を行い，MATLAB を自らの理解を確認するツールとして利用してほしい．
すいこう

執筆は慎重に行い，推敲も重ねて行った．しかし，筆者の未熟さゆえに至らない点が多々あると思われる．今後のためにも，ご意見やご批判をいただければ幸いである．本書によって多くの読者が画像・映像信号処理に関する基礎知識を共有し，本書が技術の発展に寄与することができれば，筆者にとってはこの上ない喜びである．
なお，本書を執筆するにあたり多くの方々にご協力とご支援をいただいた．まず，本書執筆の機会を与えて下さった九州工業大学の尾知博教授に感謝したい．当初は共著の予定であったが，残念ながらスケジュールの都合で実現に至らなかった．次に，首都大学東京の貴家仁志教授に感謝した
い．本書の執筆において多くの励ましの言葉をいただいた．また，新潟大学の菊池久和教授に感謝したい．日頃よりいただいている知見は本書の内容にも反映されている．本書の推敲やプログラムの動作確認に協力してくれた渡邉勤氏，安達充幸氏をはじめ，新潟大学村松研究室所属の大学院生，
学部生にも感謝したい．さらに本書執筆中，ジョージア工科大学の Jim McClellan 教授と 2 度も夕食を共にする好機に恵まれ，大きな励みとなった．
度重なる構成の見直しや不慣れな対応にも関わらずご辛抱いただき，本書の出版まで導いてくだ
さった CQ 出版社 Interface 編集長の中山俊一氏，毎日コミュニケーションズ（元 CQ 出版社 Interface編集部）の大竹友美氏に感謝したい．最後に，本書執筆を暖かく見守ってくれた友人と家族に感謝したい．
2007 年 3 月 29 日

村松正吾

前書き

3

目

次

はじめに ････････････････････････････････････････････････････････････････････････････････2

第１章

画像・映像信号処理とは ･････････････････････････････････････････9

1.1

画像・映像信号処理の基礎 ････････････････････････････････････････････････････････9● 画像・映像信号処理の流れ ･･････････････････････････････････････････････････････････9● 画像・映像信号処理の応用例 ･･････････････････････････････････････････････････････10● 画像・映像信号の入出力 ･･････････････････････････････････････････････････････････11

1.2

本書のねらい ･･･････････････････････････････････････････････････････････････････12● 本書の構成 ･･････････････････････････････････････････････････････････････････････12● 表記法 ･･････････････････････････････････････････････････････････････････････････14● MATLAB の環境 ･････････････････････････････････････････････････････････････････14

第2章

MATLAB 利用の準備 ･･････････････････････････････････････････15

2.1

基本操作 ･･･････････････････････････････････････････････････････････････････････15● 立ち上げ方と終わり方 ････････････････････････････････････････････････････････････15● オンライン・ヘルプ ･･････････････････････････････････････････････････････････････16● 行列やベクトルの扱い ････････････････････････････････････････････････････････････17

2.2 ループ処理と条件分岐処理 ･･･････････････････････････････････････････････････････20● ループ処理 ･･････････････････････････････････････････････････････････････････････20● 条件分岐処理 ････････････････････････････････････････････････････････････････････21

2.3

グラフ表示 ･････････････････････････････････････････････････････････････････････23● stem 関数 ･･･････････････････････････････････････････････････････････････････････23● plot 関数 ････････････････････････････････････････････････････････････････････････23

2.4 M ファイルの作成 ･･･････････････････････････････････････････････････････････････25● スクリプト ･･････････････････････････････････････････････････････････････････････25● 関数定義 ････････････････････････････････････････････････････････････････････････26

2.5

変数の保存と読み込み ･･･････････････････････････････････････････････････････････27● 変数の表示 ･･････････････････････････････････････････････････････････････････････28● 変数の保存 ･･････････････････････････････････････････････････････････････････････28● MAT ファイルの読み込み ･････････････････････････････････････････････････････････28

第3章

1 次元信号処理の復習 ･･････････････････････････････････････････29

3.1

標本化と量子化 ･････････････････････････････････････････････････････････････････29● 標本化 ･･････････････････････････････････････････････････････････････････････････29● 量子化 ･･････････････････････････････････････････････････････････････････････････31

3.2 周波数解析 ･････････････････････････････････････････････････････････････････････32● フーリエ解析のバリエーション ････････････････････････････････････････････････････33● 標本化定理 ･･････････････････････････････････････････････････････････････････････35● 窓関数 ･･････････････････････････････････････････････････････････････････････････37

3.3 Z 変換 ･････････････････････････････････････････････････････････････････････････40● インパルスの重み付け和表現 ･･････････････････････････････････････････････････････40● 定義 ････････････････････････････････････････････････････････････････････････････40
4目

次● 離散時間フーリエ変換（DTFT）との関係 ･････････････････････････････････････････････43

3.4

線形時不変システム ･････････････････････････････････････････････････････････････44● 線形性と時不変性 ････････････････････････････････････････････････････････････････44● 畳み込み演算 ････････････････････････････････････････････････････････････････････45● 伝達関数と周波数応答 ････････････････････････････････････････････････････････････47● FIR フィルタと IIR フィルタ ････････････････････････････････････････････････････････48

3.5 フィルタ設計 ･･･････････････････････････････････････････････････････････････････52
章末問題 ････････････････････････････････････････････････････････････････････････････55

第4章

画像処理の基礎････････････････････････････････････････････････57

4.1

画像・映像表現の概要 ･･･････････････････････････････････････････････････････････57

4.2

MATLAB での画像処理 ･････････････････････････････････････････････････････････59● 方形標本化の概要 ････････････････････････････････････････････････････････････････57● 画像の表現と入出力 ･･････････････････････････････････････････････････････････････59● 画像の入力 ･･････････････････････････････････････････････････････････････････････62● 画像の表示 ･･････････････････････････････････････････････････････････････････････63● 画像の出力 ･･････････････････････････････････････････････････････････････････････65

4.3 MATLAB による映像処理 ･･･････････････････････････････････････････････････････66● 映像の表現 ･･････････････････････････････････････････････････････････････････････66● 映像の入力 ･･････････････････････････････････････････････････････････････････････67● 映像の表示 ･･････････････････････････････････････････････････････････････････････68● 映像の出力 ･･････････････････････････････････････････････････････････････････････69

4.4

画素処理 ･･･････････････････････････････････････････････････････････････････････70● 累乗則変換，ガンマ補正 ･･････････････････････････････････････････････････････････71● ヒストグラム処理 ････････････････････････････････････････････････････････････････73

4.5

色空間 ･････････････････････････････････････････････････････････････････････････76● RGB 空間 ･･･････････････････････････････････････････････････････････････････････76● YCbCr 空間･･････････････････････････････････････････････････････････････････････77● HSI 空間 ････････････････････････････････････････････････････････････････････････80● その他 ･･････････････････････････････････････････････････････････････････････････82

章末問題 ････････････････････････････････････････････････････････････････････････････83

第5章

画像の近傍処理････････････････････････････････････････････････85

5.1
5.2

近傍処理の一般的操作 ･･･････････････････････････････････････････････････････････85
近傍処理の具体例 ･･･････････････････････････････････････････････････････････････86● 平滑化処理 ･･････････････････････････････････････････････････････････････････････86● 先鋭化処理 ･･････････････････････････････････････････････････････････････････････91

5.3 線形シフト不変システム ･････････････････････････････････････････････････････････97● インパルス応答 ･･････････････････････････････････････････････････････････････････97● 畳み込み演算 ････････････････････････････････････････････････････････････････････97● システムの性質 ･･････････････････････････････････････････････････････････････････98

5.4

時間方向フィルタ ･････････････････････････････････････････････････････････････100
目

次

5

目

次
● フレーム間平均処理 ･････････････････････････････････････････････････････････････101● フレーム間差分処理 ･････････････････････････････････････････････････････････････102

5.5

境界処理 ･････････････････････････････････････････････････････････････････････103● ゼロ値拡張法 ･･･････････････････････････････････････････････････････････････････103● 周期拡張法 ･････････････････････････････････････････････････････････････････････104● 対称拡張法 ･････････････････････････････････････････････････････････････････････104

章末問題 ･･･････････････････････････････････････････････････････････････････････････105

第6章

画像の拡大・縮小処理 ････････････････････････････････････････107

6.1

画像のマルチレート信号処理 ･･･････････････････････････････････････････････････107● 間引きによる縮小処理 ･･･････････････････････････････････････････････････････････107● 平均による縮小処理 ･････････････････････････････････････････････････････････････108● ゼロ次ホールドによる拡大処理 ･･･････････････････････････････････････････････････110

6.2

マルチレート信号処理とは？ ･･･････････････････････････････････････････････････112● 標本化の復習 ･･･････････････････････････････････････････････････････････････････112● レート変換の応用例 ･････････････････････････････････････････････････････････････112● ダウン・サンプラ ･･･････････････････････････････････････････････････････････････113● アップ・サンプラ ･･･････････････････････････････････････････････････････････････117

6.3

レート変換器 ･････････････････････････････････････････････････････････････････121● デシメータ ･････････････････････････････････････････････････････････････････････121● インターポレータ ･･･････････････････････････････････････････････････････････････123● 有理数比レート変換 ･････････････････････････････････････････････････････････････126● フレーム・レート変換 ･･･････････････････････････････････････････････････････････127

6.4 効果的実現法 ･････････････････････････････････････････････････････････････････129● 分離処理 ･･･････････････････････････････････････････････････････････････････････129● マルチレート・システムの諸性質 ･････････････････････････････････････････････････130● ポリフェーズ分解 ･･･････････････････････････････････････････････････････････････130

6.5 レート変換フィルタ設計 ･･･････････････････････････････････････････････････････133● 固有フィルタ設計 ･･･････････････････････････････････････････････････････････････133● デシメーション・フィルタ ･･･････････････････････････････････････････････････････135● インターポレーション・フィルタ ･････････････････････････････････････････････････136● 有理数比レート変換フィルタ ･････････････････････････････････････････････････････137

章末問題 ･･･････････････････････････････････････････････････････････････････････････139

第7章

DCT とウェーブレット変換 ･･･････････････････････････････････141

7.1 信号変換の必要性 ･････････････････････････････････････････････････････････････141● まずは試してみよう ･････････････････････････････････････････････････････････････141● 画素間の相関と変換 ･････････････････････････････････････････････････････････････143

7.2 信号変換の基礎 ･･･････････････････････････････････････････････････････････････145● 変換の種類 ･････････････････････････････････････････････････････････････････････145● 基底ベクトルと基底画像 ･････････････････････････････････････････････････････････147● 分離処理 ･･･････････････････････････････････････････････････････････････････････149
6目

次● 変換符号化 ･････････････････････････････････････････････････････････････････････150

7.3

離散コサイン変換（DCT）･･･････････････････････････････････････････････････････152● 定義 ･･･････････････････････････････････････････････････････････････････････････153● DFT との関係 ･･････････････････････････････････････････････････････････････････156● KLT との関係 ･･････････････････････････････････････････････････････････････････159● 実現技術 ･･･････････････････････････････････････････････････････････････････････161

7.4

フィルタ・バンク ･････････････････････････････････････････････････････････････166● 並列構成 ･･･････････････････････････････････････････････････････････････････････166● 行列演算との関係 ･･･････････････････････････････････････････････････････････････169● リフティング手法 ･･･････････････････････････････････････････････････････････････175● 画像処理応用 ･･･････････････････････････････････････････････････････････････････178

7.5

離散時間ウェーブレット変換（DWT）････････････････････････････････････････････182● ツリー構成 ･････････････････････････････････････････････････････････････････････183● レギュラリティ ･････････････････････････････････････････････････････････････････185

章末問題 ･･･････････････････････････････････････････････････････････････････････････186

第8章

多次元信号処理の基礎 ････････････････････････････････････････189

8.1 多次元信号処理の概要 ･････････････････････････････････････････････････････････189● 多次元信号処理の特徴 ･･･････････････････････････････････････････････････････････189● 多次元信号の表現 ･･･････････････････････････････････････････････････････････････189

8.2

多次元信号の周波数と周期性 ･･･････････････････････････････････････････････････192● 多次元信号の周波数 ･････････････････････････････････････････････････････････････192● 周期信号 ･･･････････････････････････････････････････････････････････････････････194

8.3 多次元フーリエ解析 ･･･････････････････････････････････････････････････････････195● フーリエ変換の定義 ･････････････････････････････････････････････････････････････195● 周波数特性 ･････････････････････････････････････････････････････････････････････197● 周波数応答 ･････････････････････････････････････････････････････････････････････200

8.4 標本化定理の再確認 ･･･････････････････････････････････････････････････････････202● 標本化とスペクトラム ･･･････････････････････････････････････････････････････････202● 大域的定速移動モデルのスペクトラム ･････････････････････････････････････････････205

8.5

多次元 Z 変換 ･････････････････････････････････････････････････････････････････207● 単位インパルス信号の重み付け表現 ･･･････････････････････････････････････････････207● 多次元 Z 変換の定義 ･････････････････････････････････････････････････････････････207● システムの伝達関数 ･････････････････････････････････････････････････････････････209

章末問題 ･･･････････････････････････････････････････････････････････････････････････209

第9章

多次元線形システム設計 ･･････････････････････････････････････213

9.1 多次元フィルタ設計 ･･･････････････････････････････････････････････････････････213● FIR フィルタと IIR フィルタ ･･････････････････････････････････････････････････････213● フィルタ仕様 ･･･････････････････････････････････････････････････････････････････214● 近似仕様 ･･･････････････････････････････････････････････････････････････････････218

9.2

FIR フィルタ設計 ･･････････････････････････････････････････････････････････････219
目

次

7

目

次
● 分離設計法 ･････････････････････････････････････････････････････････････････････220● 窓関数法 ･･･････････････････････････････････････････････････････････････････････222● マクレラン変換法 ･･･････････････････････････････････････････････････････････････227● 各種変換法 ･････････････････････････････････････････････････････････････････････233

9.3

多次元標本化格子変換 ･････････････････････････････････････････････････････････234● 多次元ダウン・サンプラ ･････････････････････････････････････････････････････････234● ダウン・サンプラと周波数スペクトラム ･･･････････････････････････････････････････237● 多次元アップ・サンプラ ･････････････････････････････････････････････････････････242● アップ・サンプラと周波数スペクトラム ･･･････････････････････････････････････････244

9.4

標本化格子変換フィルタ設計 ･･･････････････････････････････････････････････････249● 可分離デシメータ ･･･････････････････････････････････････････････････････････････249● 可分離インターポレータ ･････････････････････････････････････････････････････････250● 有理数比標本化格子変換 ･････････････････････････････････････････････････････････250● 非分離標本化格子変換 ･･･････････････････････････････････････････････････････････253● 多次元マルチレート・システムの諸性質 ･･･････････････････････････････････････････258● 適応処理の必要性 ･･･････････････････････････････････････････････････････････････258

章末問題 ･･･････････････････････････････････････････････････････････････････････････259

第 10 章 動き適応/補償フィルタリング････････････････････････････････261
10.1

固定係数 IP 変換 ･････････････････････････････････････････････････････････････261● 時間方向補間 ･･･････････････････････････････････････････････････････････････････262● 垂直方向補間 ･･･････････････････････････････････････････････････････････････････265● 時間垂直補間 ･･･････････････････････････････････････････････････････････････････268

10.2 動き適応 IP 変換 ･････････････････････････････････････････････････････････････270● 動き検出型適応補間 ･････････････････････････････････････････････････････････････270● 時間垂直メディアン補間 ･････････････････････････････････････････････････････････273

10.3

動き推定 ････････････････････････････････････････････････････････････････････276● 全探索ブロック・マッチング法 ･･･････････････････････････････････････････････････276● マッチング評価 ･････････････････････････････････････････････････････････････････277● 動き補償予測 ･･･････････････････････････････････････････････････････････････････283● 動き推定の問題 ･････････････････････････････････････････････････････････････････286

10.4

動き補償 IP 変換 ･････････････････････････････････････････････････････････････287● 固定係数 IP 変換との関係 ････････････････････････････････････････････････････････287● 動き補償時間垂直補間 ･･･････････････････････････････････････････････････････････288

章末問題 ･･･････････････････････････････････････････････････････････････････････････290
索8

引 ･･･････････････････････････････････････････････････････････････････････････････293

目

次

第1章

画像・映像信号処理とは

画像・映像情報メディアのディジタル化は，高品質，高効率，高機能，高セキュリティなどの利益をもたらす．これらの技術を実現し，発展させていくためには，画像・映像信号処理についての理解は欠かせない．本章では，本書全体を概観するために，画像・映像信号処理の概要と本書のねらいについて述べる．第 2 章以降で具体的に解説を進める．なお，本書において「画像」は静止画像
を，「映像」は動画像を示す言葉として使用する．

1.1

画像・映像信号処理の基礎

画像・映像信号処理とは，「画像・映像情報を伝送，記録，解析，加工する技術」である．その種類も圧縮，強調，改善，再構成，記述，認識など，多岐にわたる．
● 画像・映像信号処理の流れ
図 1.1 に画像・映像信号処理の流れを示す．まず，撮像機器のセンサによって光の分布が電気信号

変換
（センサ）
可視光，赤外線，X線，γ線，
電波，熱，超音波

図 1.1
画像・映像
信号処理の
流れ

電気信号（電波，光信号）

逆変換

1.1

画像・映像信号処理の基礎

9移動体通信，デジカメ，
ビデオ・カメラ

天体観測，監視衛星

医療，福祉
放送，映画，ゲーム

画像・映像
信号処理

出版，印刷

自動車，ロボット
FAX，インターネット

などなど…
監視，検査

図 1.2

画像・映像信号処理の応用例に変換される．いったん電気信号に変換されれば，その光の分布の様子を伝送，記録，解析，加工することは容易である．さらに標本化・量子化を施せばディジタル信号となり，コンピュータ上での操作が可能となる．高品質・高効率な記録・伝送のほか，暗号化などによりセキュリティを高めることもできる．表示機器によって信号を再び光の分布に戻すことで，原画像・原映像を異なる場
所，異なる時刻に再現できる．
なお，画像・映像信号は可視光に限らない．変換するセンサさえ存在すれば，紫外線や X 線など，
あらゆる物理量の分布が信号処理の対象となる．また，信号が水平方向・垂直方向を軸とする分布や配列として与えられれば「画像処理」，水平方向・垂直方向・時間を軸とする分布や配列として与えられれば「映像処理」とみなせる．
● 画像・映像信号処理の応用例
画像・映像信号処理の応用例は多岐にわたる．図 1.2 に一部の例を掲載する．いずれも画像や映像を扱う応用だが，目的が異なれば撮像の条件や要求される表示の形態も異なる．従って，要求される処理は用途に応じておのずと変わる．
ある用途で優れた方法は，別の用途では役に立たないこともある．複雑な処理を施すよりも，単純な処理の方が視覚的に優れた性能を示すこともある．人間が良いと感じるか否かは，単純な問題
ではない．
これが画像・映像信号処理の難しい部分であり，また，経験や発想を生かせる楽しい部分でもある．
10

第１章

画像・映像信号処理とは

● 画像・映像信号の入出力
なぜ，用途に応じて画像・映像信号処理への要求に違いが起こるのか．画像・映像の入出力信号に着目して，その例を示そう．
（1）撮像機器――入力部
撮像機器は光などの分布を電気信号に変換する．すなわち，画像・映像と処理システムの接点にあたる．現在，主流の撮像機器は，CCD（Charge Coupled Device）や CMOS
（Complementary Metal
Oxide Semiconductor）などの固体素子を採用し，従来の撮像管による撮像機器と比べて，小型化・軽量化されている．
放送や映画，出版などのプロ向け撮像機器では，高価な光学系を構成し，CCD/CMOS センサも複数利用して，色や解像度などが高品位な画像・映像を取得する．三板式 CCD/CMOS センサ・カメラ
がこれにあたる．
一方，安価な民生用カメラや携帯電話付属カメラは，CCD/CMOS センサ 1 枚のみで構成される場
合がほとんどである．空間解像度を犠牲にし，色情報をカラー・フィルタを通して取得するため，1枚のカラー画像を得るために「デモザイキング」と呼ばれる補間処理が必要となる．
監視カメラや車載カメラは，色情報や高解像度を必要としない場合もある．劣悪な環境にカメラが置かれていれば，ノイズ除去や強調処理が必要となるだろう．固定カメラか可動カメラかの違い
によっても動きに関する処理が変わるだろう．
身体の断層画像を直接撮影することはできない．CT スキャナは身体の周りを X 線や核磁気共鳴を利用してスキャンする．その情報から断層画像を得るために，再構成処理が必要となる．
（2）表示機器――出力部
表示機器は画像・映像信号と人間の接点にあたる．現在，映像の表示機器として電子ビーム系のCRT（Cathode Ray Tube）に変わり，液晶ディスプレイ（LCD ： Liquid Crystal Display）やプラズ
マ・ディスプレイ（PDP ： Plasma Display Panel）などのフラット・パネル系が勢力を増している．
放送では，インターレース（飛び越し）走査と呼ばれる映像フォーマットが採用されている．垂直
時間解像度を保ちつつ 1 チャネルの伝送に必要となる帯域を半分にするという技術である．放送がディジタル化されてもインターレース走査は健在である．インターレース走査では，空間の標本位置がフィールド周期という時間間隔でズレている．インターレース走査は，画素に空間的広がりや残像のある電子ビーム系の CRT に比べて，発光を画素単位で制御する LCD や PDP において視覚上の問題を生じる．空間的な標本位置のズレを解消するためのインターレース-プログレッシブ（IP）変換（デインターレース処理）という補間技術が必要となる（図 1.3）．
画像の印刷についても，レーザ記録，静電記録，感熱記録，インクジェット記録など，手法は多岐にわたる．白と黒の 2 階調注 1-1，あるいは限られた色の組み合わせで中間の明るさや微妙な色を表現しなければならない．インクかトナーかの違いも考慮しなければならない．視覚的劣化を抑えつつ限られた階調や色へ変換するハーフ・トーニングという技術が必要となる．
注 1-1 ：階調数は，表現できる明るさの種類を示す．

1.1

画像・映像信号処理の基礎

11

時間

水平

垂
直

時間

水平

垂
直

インターレース

図 1.3

プログレシップ

インターレース-プログレッシブ変換

最後に，画像・映像信号処理の結果が画像・映像であるとは限らないことにも注意しておこう．
特徴を表す数値や内容を示す判別結果が出力となることもある．指紋画像や顔画像による人物認証の結果は，個人を特定する名前や ID で十分である．

1.2

本書のねらい学ぶべき画像・映像信号処理は用途ごとに変わるのではないか――確かにそうである．しかし，汎用的に役立つ基礎知識や広く利用される要素技術が存在する．本書では，そのような画像・映像信

• 画素処理• フィルタリング• 周波数解析• 標本化とその変換号処理全般において重要と思われる，について，直感的に理解できることを目標にして解説した．そのため，数値シミュレータ MATLABのプログラム例とシミュレーション結果を豊富に掲載した．また，学習に役立つように多くの実習や演習課題も準備した．ぜひとも取り組んで，じっくりと深く理解してもらいたい．なお，図 1.4 に
本書の読み進め方の例を示しておく．
● 本書の構成
第 2 章では，MATLAB に慣れていない読者のために MATLAB の基本的な操作について解説した．
従って，MATLAB の利用経験がある読者は読み飛ばしても差し支えない．
第 3 章では，画像・映像信号処理について学ぶための準備として，1 次元信号処理について解説した．復習という位置付けで，基礎的な内容については詳細の説明を省き，結論を中心にその概要を述べた．MATLAB を利用した信号処理シミュレーションの導入も兼ねているので，第 4 章以降の理解に役立てていただきたい．
第 4 章から画像・映像信号処理の本格的な解説が始まる．第 4 章では，MATLAB で画像・映像を取り扱うための留意点や機能を解説した．また，ヒストグラム操作のような画素処理や色空間変換といった話題にも触れている．
12

第１章

画像・映像信号処理とは

第1章
画像・映像信号処理とは？

第2章
MATLAB利用の準備

第4章
画像処理の基礎第3章
1次元信号処理の復習

第5章
画像の近傍処理

発展的内容

第6章
画像の拡大・縮小処理

第8章
多次元信号処理の基礎

第7章
DCTとウェーブレット変換

第9章
多次元線形システム設計

前準備

第10章
動き適応/補償フィルタリング
基礎的内容

図 1.4

本書の読み進め方

第 5 章では，画像の近傍処理や映像のフレーム間処理について解説した．近傍処理はマスク処理，あるいはフィルタリングとも呼ばれ，もっとも基本的な画像・映像処理技術である．この章では，画像処理の分野で典型的に利用される技法とそれらの特徴について解説した．
第 6 章では，画像の拡大・縮小について解説した．映像のフレーム・レート変換の例題についても掲載した．マルチレート信号処理の導入も兼ねており，拡大・縮小処理の周波数領域での振る舞い
やシステムの設計法，効果的実現法についても解説した．
第 7 章では，離散コサイン変換（DCT ： Discrete Cosine Transform）とウェーブレット変換について解説した．DCT とウェーブレット変換は，符号化をはじめ，画像・映像信号処理において欠かせない要素技術となっている．本章では，第 6 章で紹介するマルチレート信号処理を用いて，DCT とウェーブレット変換をフィルタリングの観点からも統一的に解説した．
画像・映像信号処理は多次元信号処理である．第 8 章以降では，1 次元信号処理にはない多次元特有の問題について扱った．多くの読者にとっては，第 7 章までの内容で十分だろう．ただし，面白くなるのはここからである．第 8 章は，多次元信号処理の基礎的事項についてまとめている．特に，変数のベクトル表記を導入し，周波数解析と標本化について 1 次元信号処理との類似点と相違点をまとめている．
第 9 章は「多次元線形システム設計」と題して，主に非分離型のフィルタ設計法を紹介している．
各手法についてじっくりと理解するというよりも，多次元フィルタを設計したいとき，リファレン
スとして利用すると良いだろう．後半では，非分離型のマルチレート信号処理についても紹介した．
これは発展的内容といえよう．
第 10 章は，映像信号処理における動き情報の重要性をインターレース-プログレッシブ（IP）変換を題材に解説している．固定係数，動き適応処理，動き補償処理という順序でシミュレーションを行
1.2

本書のねらい13

い，性能の向上について確認できるように構成している．
● 表記法• 丸かっこ：連続変数．x(t)，X( jΩ)，X(z)など• 四角かっこ：離散変数．x[n]，X[k]など• 太字の小文字：ベクトル．x，a など• 太字の大文字：配列もしくは行列．X，A など

本書では次のような表記を利用する．

● MATLAB の環境•MATLAB R2006a•Signal Processing Toolbox•Image Processing Toolbox

本書に掲載した MATLAB のソース・コードは，次の環境で動作確認を行った．

本書に掲載するソース・コードは，基本的に MATLAB 本体と Signal Processing Toolbox のみで動作する．ただし，Image Processing Toolbox がある場合についてのコメントも記載し，必要に応じてソース・コードも併記した．
例題で紹介したソース・コードはすべて実習でも活用できるように，practiceXX_X.m というファイル名で用意してある．XX_X の部分は章番号と各章における実習番号となっている．一部，Image
Processing Toolbox の機能を用いた practiceXX_X_ip.m も合わせて配布している．以下の Web サイト，
http://www.cqpub.co.jp/haibai/books/39/39xxx.htm
よりダウンロードして実際に試してほしい．
参考文献（1）吹抜 敬彦；画像・メディア工学，コロナ社，2002 年．
（2）Rafael C. Gonzalez and Richard E. Woods ； Digital Image Processing, 2nd Ed.，Prentice Hall，2001．
（3）今村 元一；ビデオ信号の基礎とその操作法，CQ 出版社，2003 年．
（4）Interface 編集部 編；ディジタル放送の基礎技術入門，TECH I シリーズ，CQ 出版社，2002 年．
（5）Bahadir K. Gunturk, John Glotzbach, Yucel Altunbasak, Ronald W. Schafer, and Russel M. Mersereau ；Demosaicking: Color Filter Array Interpolation，IEEE Signal Proc. Magazine，Vol.44，Jan. 2005．
（6）Zhaoui Sun ； Video Halftoning，IEEE Trans. on Image Proc.，Vol.15，No.3，pp.678-686，Mar. 2006．
（7）Gerard De Haan, and Erwin B. Bellers ； Deinterlacing . An Overview，Proc. of IEEE，Vol.86，No.9，pp.18391857，Sep. 1998．

14

第１章

画像・映像信号処理とは

第2章

MATLAB 利用の準備

本書では MATLAB のプログラム例を多数掲載し，実際に実行することで，画像・映像信号処理に関する理解を深めてもらうことを目的としている．まず準備として，MATLAB の基本操作について概説したい．本書に掲載するプログラム例を理解して確かめるのに十分な機能のみ，解説する．
従って，インストール方法や詳細な利用法については，MATLAB のマニュアルなどを参照されたい．
なお，MATLAB を実行する環境がなくても，ソース・コードを読み解くことができれば，ほかのプ
ログラミング言語による学習も可能であろう．すでに MATLAB 利用の経験がある読者は，本章を読み飛ばし，第 3 章以降に進んでも差し支えない．

2.1

基本操作

以下では，MATLAB バージョン R2006a の利用を前提として解説を進める．
● 立ち上げ方と終わり方（1）立ち上げ方
Windows 系の OS を使用している場合，デスクトップ上にあるアイコン（図 2.1）をダブルクリックすればよい．すると，図 2.2 のような画面が現れ，すぐに利用できる状態になる．Unix 系の OS を使用している場合は，ターミナル上で，
matlabと入力すればよい．実際は，使用環境により立ち上げ方が異なることもあるため，使用するコン
ピュータの管理者に問い合わせるのが良いだろう．

図 2.1
MATLAB のアイコン

2.1

基本操作

15

図 2.2

起動直後の画面（2）終わり方MATLAB の Command Window 上（図 2.2 では右側）のプロンプト記号 >> に続いて>> exitと入力することで，MATLAB を終了することができる．
● オンライン・ヘルプ
MATLAB には豊富な数の関数があらかじめ用意されている．そこで，各関数の利用法の理解にはオンライン・ヘルプ機能は欠かせない．オンライン・ヘルプ機能の使い方について解説を進めよう．
MATLAB を終了していたら，立ち上げ直そう．まず，fft 関数が何を行う関数なのかを調べてみよう．
Command Window 上で，>> help fftを実行する．すると，図 2.3 のような表示が現れる．
ヘルプ文が長く，画面をはみ出してしまう場合には，あらかじめ more on と設定しておくと便利である．すると，ヘルプ文をはじめとした Command Window 上の出力結果が 1 画面分の長さに区切られて表示される．
>> more on>> help fft
続きを表示する際には，スペース・キーなどを押せばよい．more の機能を停止したければ，>> more offとすればよい．
16

第2章

MATLAB 利用の準備

図 2.3
オンライン・ヘルプの使用例

例題 2.1conv 関数

conv 関数は何を行う関数か？
解
conv 関数は，畳み込み演算や多項式の積演算を行う関数である．
例題 2.2

help .

help .
（ヘルプ・ドット）というコマンドを実行すると，何が表示されるか？
解
help . を実行すると，演算子や特殊記号の説明が表示される．
例題 2.3

help ihelp i（ヘルプ・アイ）というコマンドを実行すると，何が表示されるか？
解
help i を実行すると，複素数の説明が表示される．help j（ヘルプ・ジェイ），help pi（ヘル
プ・ピーアイ）も確かめてみよう．
関数をはじめとする MATLAB の操作方法がわからなくなったら，このオンライン・ヘルプ機能を利用すると便利である．より詳細な説明が必要になったら，doc コマンドを利用すればよい．例えば，
Command Window 上で，>> doc fftを実行すると，図 2.4 に示すようなオンライン・ドキュメントを閲覧することができる．
● 行列やベクトルの扱い
MATLAB の大きな利点の一つに，行列操作が簡便であることが挙げられる．MATLAB において
2.1

基本操作

17

図 2.4

オンライン・ドキュメントの使用例

行列やベクトルを扱う方法について解説しよう．
まず，

 1 2
A =  3 4 
 5 6

……………………………………………………………………………………………
（2.1）

 1 2 3B=
 4 5 6…………………………………………………………………………………………
（2.2）という行列の積 C ＝ AB を求めることを例として，解説を進める．
行列 A，B の定義は，Command Window 上で>> A = [ 1 2 ;
3 4 ;
5 6 ];>> B = [ 1 2 3 ;4 5 6 ];と入力する．すなわち，行方向は要素間をスペースで区切り，列方向は各行ベクトル間を;（セミコロン）で区切って並べる．
また，行列積 C ＝ AB は，>> C = A * B;
18

第2章

MATLAB 利用の準備行列（あるいはベクトル）に対する基本操作

表 2.1

コマンド

内

X+Y，X-Y，X*Y

加算，減算，乗算

X.*Y，X./Y

要素ごとの乗算，要素ごとの除算

kron(X,Y)

クロネッカー・テンソル積

X. ，X

転置，エルミート転置

fliplr(X)，flipud(X)，rot90(X)行反転，列反転，90 度回転

容

X(:)

列ベクトル化X(:,iCol)，X(iRow,:)

iCol 番目列ベクトル，iRow 番目行ベクトル

X(:,iCol:jCol)[ X(:,iCol), X(:,iCol+1), ..., X(:,jCol) ]X(iRow:jRow)[ X(iRow,:); X(iRow+1,:); ...; X(jRow,:) ]と実行する．すると，Cに演算結果が代入される．Command Window 上で>> Cのように末尾に;（セミコロン）
を付けずに変数名 Cを入力することで，C =9 12 15
19 26 33
29 40 51のように表示され，行列 C の内容を確かめることができる．
ベクトルは列数が 1，あるいは行数が 1 の行列と考えられるので，同じように操作できる．
行列（あるいはベクトル）X，Yに対する基本的な演算操作を表 2.1 にまとめる．
例題 2.4

行列転置

行列 B の転置と行列 A の転置の積 D を計算してみよう．
解Command Window 上で>> D = B.' * A.';>> Dと入力すると，D =9 19 29
12 26 40
15 33 51のように表示される．
例題 2.5行列要素の選択

行列 A の上の 2 本の行ベクトルからなる正方行列と，行列 B の左にある 2 本の列ベクトルからなる正方行列との和 E を計算してみよう．
2.1

基本操作

19

解
Command Window 上で>> E = A(1:2,:) + B(:,1:2);>> Eと入力すると，
E =2 4
7 9と表示される．
なお，MATLAB では行列要素のインデックスは 1 から始まることに注意されたい．

2.2

ループ処理と条件分岐処理

MATLAB では，ループ処理のために for 文と while 文が利用できる．また，条件分岐のために if
文と switch 文が利用できる．for 文と if 文の使用法を，簡単な例を用いて解説しよう．
● ループ処理
まず，for 文を用いたループ処理の例を見てみよう．例えば，
10s = ∑ n …………………………………………………………………………………………………（2.3）
n =0という演算は，Command Window 上で>> s = 0; % s の初期値設定>> for n = 0:10 % n を 0 から 10 まで繰り返す
s = s + n; % s に n の値を累積加算
endと実行できる．
>> sと入力するとs =55と表示される．for 文は，for の直後に記述された変数の仕様に従い，for と end の間の処理を繰り返す．for 文，while 文の詳細については，help for，help while を参照されたい．なお，%から行末まではコメント文となり，処理には影響しない．
例題 2.6for 文

k 行 n 列目の要素が，20

第2章

MATLAB 利用の準備

[C] k, n = cos ⎛⎝ k (2n + 1) π ⎞⎠ , k, n = 0, 1, 2 , 3 ………………………………………………………（2.A）
8と与えられる 4 × 4 行列 C を生成しよう．cos 関数，定数 pi を用いてもよい．ただし，MATLAB
では行列のインデックスが 1 から始まることに注意されたい．
解Command Window 上で>> for iCol=1:4n = iCol - 1;
for iRow=1:4
k = iRow - 1;C(iRow,iCol) = ...
cos(k*(2*n+1)*pi/8);
end
endと実行すればよい．
>> Cと入力すると，
C =1.00001.00001.00000.92390.3827 -0.3827 -0.9239

0.7071 -0.7071 -0.7071
0.3827 -0.9239

1.00000.7071

0.9239 -0.3827と表示される．
なお，複数行にまたがるコマンドは，...の後に改行しなければならない．
● 条件分岐処理
次に，if 文を用いた条件分岐処理について解説しよう．例えば，n = 0 ならば d = 1，n ≠ 0 ならば d= 0，それ以外では d は値をとらないという処理

1
d= 0

φ

n=0
n 0

………………………………………………………………………………………
（2.4）

その他

は，あらかじめ変数 n に値を代入した上で，>> if n==0 % n が 0 ならば
d = 1; % d は 1.
elseif n~=0 % n が 0 ではなければ，
d = 0; % d は 0.
2.2

ループ処理と条件分岐処理

21

else % それ以外では，
d = []; % d は空.
endのように実行できる（例えばあらかじめ n=[]が設定されていれば，dは空となる）．if 文は if の直後にある条件式に従い，条件分岐を行う．条件が満たされた場合，if に続く処理が実行され，条件が満たされなかった場合，else 以下の処理が実行される．elseif は，条件付きの else 文である．if
文の詳細については help if を参照されたい．また，条件式として使用される比較演算子，論理演
算子については，help relop を参照されたい．
例題 2.7

条件分岐

例題 2.6 で与えられた 4 × 4 行列 C の 1 行目の行ベクトルに係数 1/2 を乗じ，残りの行ベクトルに
係数 1/√￣
2 を乗じて，4 × 4 行列 D を生成してみよう．sqrt 関数を用いてよい．
解
例題 2.6 の解答に示したコマンドの実行直後に>> for iRow=1:4
k = iRow - 1;
if k==0
D(1,:) = C(1,:)/2;
else
D(iRow,:) = ...
C(iRow,:)/sqrt(2);endendと実行すればよい．
>> Dと入力すると，
D =0.50000.50000.50000.65330.2706 -0.2706 -0.6533

0.5000 -0.5000 -0.5000
0.2706 -0.6533

0.50000.50000.6533 -0.2706と表示される．なお，この行列 D は，第 7 章で詳しく解説する離散コサイン変換（DCT ： Discrete
Cosine Transform）
行列と呼ばれる直交行列である．
if 文のほかにも switch 文によって処理の分岐を実現できる．詳細については help switch を参
照されたい．
22

第2章

MATLAB 利用の準備

2.3

グラフ表示

MATLAB には，便利なグラフ表示機能が多数用意されている．以下では，信号の周波数特性表示
を例として，グラフ表示に使う stem 関数と plot 関数の使い方を解説しよう．なお，周波数特性については次章においてあらためて解説を行うので，ここではグラフ表示の一例として読み進めてもらいたい．
● stem 関数
まず準備として，rand 関数を使って適当な 8 × 1 ベクトル x を生成しよう．Command Window 上で>> x = rand(8,1);と入力すればよい．直後に>> xと入力すると，例えば
x =0.95010.23110.60680.48600.89130.76210.45650.0185のように表示される．rand 関数は一様分布の疑似乱数を生成する関数なので，実際には上記のものと異なることがある．
では，ベクトル x の stem 表示を行ってみよう．Command Window 上で>> stem(x)と入力すると，図 2.5 のような表示が得られる．stem 表示は，離散時間信号（数列）を表すのに便利な機能である．
● plot 関数
では次に，plot 関数を利用してベクトル x の周波数振幅特性を見てみよう．Command Window 上
で>> A = 20*log10(abs(fft(x,512)));>> plot(A)と入力すると，図 2.6 のような表示が得られる．1 行目では，x の振幅特性（［dB］）を 512 点 FFT（Fast
Fourier Transform）を用いて求めている．2 行目が実際にグラフ表示を行っている部分である．plot
表示はデータ間を直線で補間してグラフを表示する．オプションの指定によって，点のみの表示も
2.3

グラフ表示

23

図 2.5stem 表示の例

図 2.6

plot 表示の例

可能である．詳細については help plot を参照されたい．
例題 2.8plot 表示同じサイズのベクトル変数 x，yを用いて plot(x,y)を実行すると，x-y プロット表示がなされる．変数 t を 0.0 から 6.3 まで 0.1 刻みで変えながら，関数 f(t) = cos(t)を x-y プロットしてみよう．
解Command Window 上で>> for i = 0:63t(i+1) = i/10;
f(i+1) = cos(t(i+1));
end>> plot(t,f)
もしくは，>> t = 0.0:0.1:6.3;>> f = cos(t);>> plot(t,f)と入力すればよい．

• 1 行目は，0.0 〜 6.3 まで 0.1 刻みの値を要素とするベクトル変数 t を生成する．
• 2 行目は，ベクトル変数 t の各要素に対する cos 関数の演算を行い，各要素に対応する演算結

後者の解について解説しよう．

• 3 行目で，ベクトル変数 t，f を用いた x-y プロット表示を行う．
果をベクトル変数 f へ代入する．

このように，MATLAB の表現をうまく利用することで，for 文を省いた簡潔な記述が可能となる．
24

第2章

MATLAB 利用の準備

例題 2.9

plot 表示ディジタル信号は周期的な周波数特性を有する．横軸の 1 周期を 2π と正規化して，先のベクト
ル x の周波数振幅特性を表示してみよう．
解Command Window 上で>> f = 0:2/512:2-2/512;>> A = 20*log10(abs(fft(x,512)));>> plot(f,A)>> xlabel(['Normalized Frequency ',...
'(¥times¥pi rad)'])>> ylabel('Magnitude (dB)')と実行すればよい〔Unix 系 OS 上では，¥は \（バックスラッシュ）に読み換える〕．

2.4

M ファイルの作成

ここまで読み進めると，MATLAB の使い方に慣れると同時に，Command Window 上での作業に煩わしさを感じるだろう．この煩わしさは，次に解説する M ファイルの作成法と使用法を覚えることで解消される．
● スクリプト
MATLAB では，M ファイルと呼ばれるスクリプト・ファイルによって一連の処理をまとめることができる．ここでは，MATLAB 付属のエディタなどを使用し，ampres.m というファイルを作成してみよう．
MATLAB のエディタを利用する場合は，Command Window 上で>> edit ampresと実行すればよい．また，使い慣れたテキスト・エディタを利用してもよい．ただし，ファイルの拡張子は .m とすること．
以下の内容をファイル ampres.m に記述しよう．
x = rand(8,1);
f = 0:2/512:2-2/512;
A = 20*log10(abs(fft(x,512)));plot(f,A)
xlabel(['Normalized Frequency ',...
'(¥times¥pi rad)'])ylabel('Magnitude (dB)')
続いて Command Window 上で
2.4

M ファイルの作成

25

>> ampresと実行してみよう．すると，横軸を正規化した周波数振幅特性が表示される．
● 関数定義先のスクリプト・ファイルでは，入力 xや FFT 点数を変えたいときに，いちいちファイルを編集しなければならない．MATLAB では，スクリプト・ファイルをさらに発展させて，独自の関数を定義することができる．先ほど作成したファイル ampres.m を以下のように編集しよう．
function A = ampres(x,nPoints)% AMPRES: Display Amplitude Response% Copyright (c), 20XX, (Your name),%

All rights reserved

f = 0:2/nPoints:2-2/nPoints;
A = 20*log10(abs(fft(x,nPoints)));plot(f,A)
xlabel(['Normalized Frequency ',...
'(¥times¥pi rad)'])ylabel('Magnitude (dB)')
続いて，Command Window 上で>> x = rand(8,1);>> A = ampres(x,512)と実行してみよう．すると周波数振幅特性が表示される．入力ベクトル xや FFT 点数 nPoints を変えることができるので，試してみよう．
例題 2.10

M ファイル

周波数特性は複素数として与えられ，位相特性も持つ．位相特性を表示する phsres 関数も作成してみよう．
解
ファイル名： phsres.mfunction P = phsres(x,nPoints)% PHSRES: Display Phase Response% Copyright (c), 20XX, (Your name),%

All rights reserved

f = 0:2/nPoints:2-2/nPoints;
X = fft(x,nPoints);
P = 180*angle(X)/pi;plot(f,P)
xlabel(['Normalized Frequency ',...
26

第2章

MATLAB 利用の準備'(¥times¥pi rad)'])ylabel('Phase (degrees)')angle 関数についてはオンライン・ヘルプを参照されたい．
例題 2.11

M ファイルsubplot 関数を用いると，一つのグラフ内に複数のグラフを表示できる（help subplot を参照）．
振幅特性と位相特性を同時に表示する freqres 関数を作成してみよう．
解
ファイル名： freqres.mfunction [A,P] = freqres(x,nPoints)% FREQRES: Display Frequancy Response% Copyright (c), 20XX, (Your name),%

All rights reserved

f = 0:2/nPoints:2-2/nPoints;
X = fft(x,nPoints);
A = 20*log10(abs(X));
P = 180*angle(X)/pi;
subplot(2,1,1);plot(f,A)
xlabel(['Normalized Frequency ',...
'(¥times¥pi rad)'])ylabel('Magnitude (dB)')
subplot(2,1,2);plot(f,P)
xlabel(['Normalized Frequency ',...
'(¥times¥pi rad)')ylabel('Phase (degrees)')
例題 2.12

オンライン・ヘルプオンライン・ヘルプ機能を使って help ampres，help phsres，help freqres を調べてみよう．
解function に続く，コメントアウトされた行の内容が表示される．

2.5

変数の保存と読み込み

Command Window 上で利用した変数は，ワークスペース（Workspace）上に保持されている．しかし，ワークスペース上のデータは MATLAB を終了するたびに消えてしまう．以下では，ワークス
2.5

変数の保存と読み込み

27

ペース上におけるデータのファイル保存とその読み込みに関する機能を紹介しよう．
● 変数の表示ワークスペース上に保持されている変数を確認してみよう．Command Window 上ではコマンド
who を利用できる．例えば，>> whoと実行するとYour variables are:A xのように表示される．この例では，保持されている変数が Aと xであることがわかる．より詳しく調
べたいときは，コマンド whos を利用する．データ型やサイズなど，より詳細に表示される．また，Workspace ウィンドウでも確認できる．
● 変数の保存変数 Aと xを保存したい場合，Command Window 上では>> save mysignal A xと実行すればよい．変数 Aと xはファイル mysignal.mat に保存される．これは MAT ファイルと呼ばれる．拡張子 .mat は自動的に付加される．
実際に保存されているかを確かめてみよう．Command Window 上で>> lsと実行することにより，ファイル mysignal.mat の有無を確認できる．
● MAT ファイルの読み込み
では次に，ファイル mysignal.mat を読み込んでみよう．その前に，Command Window 上で>> clearを実行しよう．コマンド clear は，ワークスペース上の変数をすべて消去する．この時点で，コマンド who を用いて現在保持している変数を確認しても何も表示されないはずである．clear は変数名を指定して消去することも可能である．詳細は help clear を参照されたい．
すべての変数が消去されているようならば，以下のコマンドを実行してみよう．
>> load mysignal>> who
変数 Aと xがワークスペース上に読み込まれていることが確認できる．
ここまでの内容をマスタすれば，MATLAB を利用した高度なシミュレーションも可能だろう．な
お、次章以降で MATLAB のコマンド例を示す際には，スクリプトとして M ファイルに記述することも考慮し，プロンプト >> は省略する．
参考文献（1）サイバネットの MATLAB ホームページ，http://www.cybernet.co.jp/matlab/

28

第2章

MATLAB 利用の準備

第3章

1 次元信号処理の復習

第 4 章以降で，画像・映像信号処理について解説する．本章では，その理解に必要な 1 次元信号処理について，MATLAB を利用しながら復習を行おう．内容は，フーリエ解析，標本化定理，窓関数，
Z 変換，線形時不変システム，畳み込み演算，伝達関数，フィルタ設計の概説である．復習という位置づけのため，詳細な定義や議論，証明などは割愛している．1 次元信号処理についてより詳しく学
習したい読者は，文献（1）などを参照してほしい．既に 1 次元信号処理について熟知している読者は，本章を読み飛ばして第 4 章以降に進んでも差し支えない．

3.1

標本化と量子化ディジタル信号処理システムの基本構成を図 3.1 に示す．アナログ-ディジタル変換器（ADC ：Analog to Digital Converter）には，あらかじめアナログ・フィルタ（Analog Low-pass Filter）によって帯域制限された信号 x(t)が入力され，標本化と量子化が施される．結果としてディジタル信号 x[n]が出力される．x[n]には，フィルタ処理や変調，圧縮などのディジタル処理が施される．その出力y[n]は，必要に応じて再度ディジタル-アナログ変換器（DAC ： Digital to Analog Converter）とアナ
ログ・フィルタによりアナログ信号 yR(t)として復元される．
● 標本化
図 3.2 に標本化（Sampling）の概略を示す．標本化は，あらかじめ定められた標本化周期（Sampling
Period）ごとにアナログ信号 x(t)の瞬時値 x(nTS)を取得し，離散時間信号，すなわち数列 xC[n]へと変換
xS (t )

アナログ・
フィルタ

x (t )

A-D変換器（ADC）

x [n ]

ディジタル・システム

y [n ]

D-A変換器（DAC）

y (t )h (t )＊ x (t )

図 3.1

アナログ・
フィルタ

yR (t )h (t )＊ y (t )ディジタル信号処理の基本構成

3.1

標本化と量子化29

帯域制限信号x (t )

離散時間信号xC [n ]

標本化tn

xC [n ]＝ x (nTS )TS

TS ：標本化周期
xC [n ]：離散時間信号

図 3.2

標本化
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
1

0

1

2

3

4

5

6

7

8

図 3.3 余弦波の標本化する．各標本の値は標本値と呼ぶ．
例題 3.1

標本化

周波数 1Hz の余弦波 x(t) = cos2 π t に対し，標本化周期 TS = 1/8［sec］の標本化を施し，離散時間
信号 xC[n]を生成してみよう．
解
以下に，MATLAB によるシミュレーション例を示す．なお，時間幅を 8［sec］とした．
f = 1;
Ts = 1/8;
t = 0:Ts:8-Ts;
xc = cos(2*pi*f*t);stem(t,xc)
図 3.3 に結果を示す．

30

第3章

1 次元信号処理の復習離散時間信号xC [n ]x [n ]

ディジタル信号Δ
量子化

nx [n ] ＝ Δ⋅roundn( )x C [n ]Δ

Δ：量子化ステップx [n ]：ディジタル信号

図 3.4

実習 3.1

量子化

標本化

M-file ： practice03̲1.m
標本化周期 TS を半分（1/16［sec］），または倍（1/4［sec］）にして，同様の手順を試してみよう．
そのほかの条件についても試してみよう．
● 量子化
一般に，離散時間信号 xC[n]は時間的には離散であるが，振幅は連続な値をもつ．このため，コンピュータによる処理には適していない．そこで，振幅を離散化するために量子化を施す．図 3.4 に量子化（Quantization）の概略を示す．あらかじめ定められた量子化ステップ（Quantization Step）ごとに離散時間信号 xC[n]の振幅を離散化し，ディジタル信号 x[n]を得ている．線形量子化では Δ を一定に設定するが，必ずしも一定である必要はない注 3-1．
線形量子化の一例を示そう．

x [n]x[n] = Δ ⋅ round ⎛⎝ C ⎞⎠Δ……………………………………………………………………………（3.1）

ただし，round は四捨五入による整数化を意味する．
例題 3.2量子化

例題 3.1 で与えられた離散時間信号 xC[n]に対して，Δ ＝ 1/4 の線形量子化を施してみよう．
解
以下に，MATLAB によるシミュレーション例を示す．ただし，xc には余弦波を標本化して得られた離散時間信号 xC[n]が保持されているものとする．
delta = 1/4;
x = delta * round(xc/delta);
注 3-1 ：非線形量子化や適応量子化など．

3.1

標本化と量子化

31

1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1

0

1

2

3

4

5

6

7

8

図 3.5 余弦波の離散化

stem(t,xc,'filled')
hold onstem(t,x)
hold off
図 3.5 に結果を示す．黒丸（●）が量子化前，白丸（○）が量子化後の数列を表している．量子化による誤差を確認することができる．
実習 3.2量子化

M-file ： practice03̲2.m
量子化ステップ Δ を倍（1/2）にして同様の手順を試してみよう．また，そのほかの条件でも試し
てみよう．

3.2

周波数解析

図 3.6 に示すように，アナログ信号 x(t)はさまざまな周波数の（複素）正弦波の重み付け和に展開できる．フーリエ解析は，ある信号がどのような正弦波の成分から構成されるのかを解析する手段を与える．
t

x (t )

t
t

t

t

図 3.6

32

第3章

フーリエ解析

1 次元信号処理の復習

x (t )

xT 0 (t )X ( jΩ)
FT

Ω

t

T0

（a）フーリエ変換

X (e jω)x [n ]

Ω0＝

t

2π

T0

k

（b）フーリエ級数xN [n ]DTFT

XN [k ]

N

DTFS
−2π

n

Ck

FS

2π ω

0

N

（c）離散時間フーリエ変換

x [n ]DFT

X [k ]nNnk（d）離散時間フーリエ級数Nk（e）離散フーリエ変換

図 3.7 五つのフーリエ解析● フーリエ解析のバリエーション
信号の周期性の有無，連続・離散の違いから，フーリエ解析には以下の五つのバリエーションがある（以下，R は実数集合，z は整数集合を意味する）．
（1）フーリエ変換（FT ： Fourier Transform）
フーリエ変換は，非周期・連続な信号 x(t)の周波数解析に用いられる．周波数スペクトラム X( jΩ)
もまた，非周期・連続となる（図 3.7（a）を参照）．順変換，逆変換は以下のとおり．
∞

X( jΩ ) = ∫ x (t ) e− jΩ t dt, Ω ∈ R ……………………………………………………………………（3.2a）−∞x(t ) =1 ∞X( jΩ )e jΩ t dΩ, t ∈ R …………………………………………………………………（3.2b）2π ∫−∞（2）フーリエ級数（FS ： Fourier Series）
フーリエ級数は，周期・連続な信号 xT0(t)の周波数解析に用いられる．周波数スペクトラム Ck は，
非周期・離散となる（図 3.7（b）を参照）．順変換，逆変換は以下のとおり．

Ck =

1 T
xT (t )e− jkΩ t dt, k ∈ Z
T0 ∫0
0

0

0

……………………………………………………………………（3.3a）∞xT (t ) = ∑ Ck e jkΩ t , t ∈ R …………………………………………………………………………（3.3b）0k=−∞（3）離散時間フーリエ変換（DTFT ： Discrete-Time Fourier Transform）
離散時間フーリエ変換は，非周期・離散な信号 x[n]の周波数解析に用いられる．周波数スペクトラ
ム X(e jω )は，周期・連続となる（図 3.7（c）
を参照）．順変換，逆変換は以下のとおり．
3.2

周波数解析

33

∞

X(e jω ) = ∑ x[n]e− jω n, ω ∈ R……………………………………………………………………（3.4a）n =−∞x[n] =1 2π
X (e jω )e jω n, n ∈ Z ……………………………………………………………………（3.4b）2π ∫0（4）離散時間フーリエ級数（DTFS ： Discrete-Time Fourier Series）
離散時間フーリエ級数は，周期・離散な信号 xN[n]の周波数解析に用いられる．周波数スペクトラ
ム XN[k]は，周期・離散となる（図 3.7（d）を参照）．順変換，逆変換は以下のとおり．
N −1

XN [k] = ∑ xN [n]WNnk, k ∈ Z
n =0………………………………………………………………………（3.5a）

N −1

1
XN [k]WN−nk, n ∈ Z ……………………………………………………………………（3.5b）N∑
k=0

xN [n] =ただし， WN = e

−j

2π
N ．

（5）離散フーリエ変換（DFT ： Discrete Fourier Transform）
離散フーリエ変換は，有限・離散な信号 x[n]の周波数解析に用いられる．周波数スペクトラム X[k]は，有限・離散となる（図 3.7（e）を参照）．順変換，逆変換は以下のとおり．
N −1

X [k] = ∑ x[n]WNnk, k = 0, 1, , N − 1 ………………………………………………………………（3.6a）n =0x[n] =N −1

1
X [k]WN−nk, n = 0, 1, , N − 1 …………………………………………………………（3.6b）N∑
k=0

これは有限信号に周期性を仮定して，DTFS による解析を行うことと等価である．
DFT に は 高 速 ア ル ゴ リ ズ ム が 存 在 す る ． 総 称 し て 高 速 フ ー リ エ 変 換（ FFT ： Fast Fourier
Transform）と呼ばれる．MATLAB では，fft 関数，ifft 関数として DFT の順変換と逆変換が提供されている．
FFT は積分を必要とせずに点で高速な演算が可能なため，有限・離散ではない信号に対してもよく利用される．この場合，信号の周期性を暗に仮定していることに注意されたい．
例題 3.3

周波数特性

例題 3.1 で与えられた余弦波の離散時間信号 xC[n]の周波数特性を 512 点 DFT を用いて観察してみよう．
解
以下に，MATLAB におけるコマンド例を示そう．なお，xc にはあらかじめ例題 3.1 で与えられた数列が保持されているものとする．
nPoints = 512;
figure(1) % 正規化周波数
freqz(xc,1,nPoints)
figure(2) % アナログ周波数34

第3章

1 次元信号処理の復習

1000

振幅[dB]

−100
−200
−300
−400

0

0.5

1

1.5

2

2.5

3

3.5

4

2.5

3

3.5

4

周波数[Hz]200

位相[ °]

100
0
−100
−200
0

0.5

1

1.5

2
周波数[Hz]

図 3.8

周波数特性

freqz(xc,1,nPoints,1/Ts)
周波数特性の表示には freqz 関数を用いた．図 3.8 にアナログ周波数表示の結果を示す．
実習 3.3

周波数特性

M-file ： practice03̲3.m
次のことを試してみよう．ただし，DFT 点数は 512 点で一定とする．

•標本化周期 TS = 1/16［sec］，1/4［sec］の場合についても周波数特性を確かめてみよう．どのように変化するか？

•時間幅を4［sec］，または16［sec］にして周波数特性を確かめてみよう．どのように変化するか？
● 標本化定理
最大周波数 Ω MAX の帯域制限信号 x(t)は，Ω S = 2π/TS > 2Ω MAX の標本化周波数で標本化した標本化列
x[n]から再構成可能である．これを標本化定理という．逆に，この条件を満たさなければ再構成は不可能である．このことを MATLAB で確かめてみよう．
例題 3.4

標本化定理の確認

周波数 F = Ω/2π = 3［Hz］の余弦波 x3 (t) = cos 6 π t と，周波数 F = Ω/2π = 5［Hz］の余弦波 x5 (t) =
3.2

周波数解析

35

1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1

0

1

2

3

4

5

6

7

8

図 3.9 標本化定理の確認

cos 10 π t を，共に標本化周期 TS = 1/8［sec］で標本化し，結果として得られる離散時間信号 x3[n]とx5[n]を比較してみよう．
解以下に MATLAB 上でのコマンド例を示す．
% DFT 点数
nPoints = 512;
% 標本化周期
Ts = 1/8;% 時間幅
duration = 8;
% 標本点
t = 0:Ts:duration-Ts;% 標本データx3 = cos(6*pi*t);x5 = cos(10*pi*t);% x3 の表示
figure(1) % 数列
stem(t,x3)
figure(2) % 周波数特性
freqz(x3,1,nPoints,1/Ts)% x5 の表示
figure(3) % 数列
stem(t,x5)
figure(4) % 周波数特性36

第3章

1 次元信号処理の復習

表 3.1 代表的な窓関数
名

称

定 義
0≦n≦M−1
それ以外

方形窓

1
wR＝
0

ハニング窓

wN＝

ハミング窓

1
2πn
25
wM＝ wR d−(1−d )cos
，d＝
2
M
46

ブラックマン・ハリス窓

(
(

1
2πn
w 1−cos
2 R
M

wB＝wR

(

)

)

2πn
4πn
0.423−0.498 cos＋0.0792 cosMM)

freqz(x5,1,nPoints,1/Ts)
x3 と x5 がまったく同じになることが確認できる（図 3.9）．F = 5［Hz］の余弦波は標本化定理を満たしていないため，FS/2 = 4［Hz］で折り返し，F = 3［Hz］と区別できなくなる．
実習 3.4

標本化定理の確認

M-file ： practice03̲4.m

Ω > ΩS/2 となるほかの余弦波でも試してみよう．また，標本化周期を変化させるとどうなるかを試してみよう．
● 窓関数
理論上，余弦波（あるいは正弦波）の周波数特性は線スペクトラムとなるはずである．しかし，例えば図 3.8 のように，DFT（FFT）の結果は線スペクトラムとなっていない．
DFT は有限長離散信号のためのフーリエ解析である．先の例では余弦波に有限な時間範囲を定め，
DFT 点数に足りない部分をゼロ値のサンプルで埋めた．その影響が周波数特性の計算結果に現れている．一般に信号の周期性は不明であり，切り取った信号の周波数特性を計算すると，同じような問題が起こりうる．
窓関数は，信号の切り取りの影響を抑える役割をもつ．短時間フーリエ変換（MATLAB では
specgram 関数）やフィルタ設計（MALTAB では fir1 関数や fir2 関数）に利用される．表 3.1 に代表的な窓関数の例を挙げておこう．
例題 3.5窓関数

例題 3.1 の離散時間信号 x C [n]に対してハニング窓を掛けてみよう．ただし，窓長 M を 64 点（8［sec］）としよう．また，DFT 点数を 512 点として周波数特性も観察し，図 3.8 と比較してみよう．
解以下に MATLAB によるコマンド例を示す．
% 窓長
nPoints = 64;
3.2

周波数解析

37

1
0.5
0
−0.5
−1
0

1

2

3

4

5

6

7

8

0

1

2

3

4

5

6

7

8

1
0.5
0
−0.5
−1

図 3.10窓関数適用前（上）と適用後（下）% 標本化周期
Ts = 1/8; % 1/Fs
% 時間幅
duration = 8;
% 標本点
t = 0:Ts:duration-Ts;% 標本データ
xc = cos(2*pi*t);% 窓関数
w = window(@hanning, nPoints);% 窓関数の適用
xw = w(:).*xc(:);
xr = xc(:);% 時間領域表現
figure(1)subplot(2,1,1)
stem(t,xc)
subplot(2,1,2)
stem(t,xw)% 周波数領域表現
figure(2)38

第3章

1 次元信号処理の復習

周波数領域時間領域
10

振幅[dB]

0.8

振幅

0.6
0.4

−50

−100

0.2
0

20

40

0

60

0.2

0.4

0.6

0.8

正規化周波数[×πrad/サンプル]

サンプル（a）ハニング窓の例
50

振幅[dB]

0

−50

−100

0

0.5

1

1.5

2

2.5

3

3.5

4

2.5

3

3.5

4

周波数[Hz]2000

位相[ °]

0
−2000
−4000
−6000
0

0.5

1

1.5

2
周波数[Hz]（b）窓関数適用後の周波数特性

図 3.11 窓関数の例

3.2

周波数解析

39

freqz(xw,1,512,1/Ts)
hold onfreqz(xr,1,512,1/Ts)
subplot(2,1,1)axis([0 4 -100 50])
% 窓関数
wvtool(w);
図 3.10，図 3.11 に結果を示す．
実は，図 3.8 は 64 点の方形窓を掛ける操作そのものである．
実習 3.5窓関数

M-file ： practice03̲5.m
ハミング窓は hamming 関数として用意されている．@hanning の代わりに @hamming も試してみ
よう．窓長，DFT 点数も変えて観察してみよう．

3.3 Z 変換信号処理では，時間領域表現，周波数領域表現に加えて，Z 変換領域表現の三つの表現を使いこなすことが要求される．Z 変換領域の表現は，システムの安定性の判別や設計，実現において重要な役割を果たす．
● インパルスの重み付け和表現
任意の離散時間信号 x[n]（以降，量子化の影響を無視して xC[n]という表記を x[n]に変える）は，インパルスの重み付け和として，∞

x[n] = ∑ x[k]δ [n − k] …………………………………………………………………………………（3.7）
k=−∞と表現できる．ここで，⎧1 n =1
δ [n] = ⎨⎩0 n ≠ 0である．例えば，図 3.12 の数列は図 3.13 のように表現できる．これは Z 変換にとっても便利な表現
である．
● 定義
Z 変換は，∞

X(z) = ∑ x[n]z −n, z ∈ C （以下，C は複素数集合を意味する） ………………………………（3.8）
n =−∞と定義され，
40

第3章

1 次元信号処理の復習

ディジタル信号

x [n ]
5
3

7

6

4

2

0

⁝

3

1 2

3 4 5 6 7

インパルス δ[n ]δ[n ]＝x [n ]＝∞

k ＝−∞

図 3.12数列

3n1 n ＝00 n ≠0x [0]＝3x [1]＝5x [2]＝4
x [3]＝6
x [4]＝2
x [5]＝3x [6]＝7x [7]＝3⁝x [k ]δ[ n − k ]インパルスの重み付け和表現（1）…，x [0] ＝ 3 ，x [1] ＝ 5 ，x [2] ＝ 4 ，…

x [n ] ＝ … ＋ 3 δ[n − 0] ＋ 5 δ[n − 1] ＋ 4 δ[n − 2] ＋ …

図 3.13

インパルスの重み付け和表現（2）x [n ] ＝ … ＋ 3 δ[n − 0] ＋ 5 δ[n − 1] ＋ 4 δ[n − 2] ＋ …
Z
X (z ) ＝ … ＋ 3 z −0 ＋ 5 z −1 ＋ 4 z −2 ＋ …

図 3.14 Z 変換の例

Z{ x[ n ] } = X(z)とも表現される．
例題 3.6

インパルスの Z 変換

n を変数， k を定数として δ [n − k]の Z 変換

Z{δ [n − k]}を求めてみよう．
解
∞

∞

n =−∞

n =−∞

Z{δ [n − k]} = ∑ δ [n − k]z−n = ∑ δ [n]z−(n+k) = z −k
Z 変換は線形であるため，図 3.13 の数列の δ [n − k]を z−k に置き換えることで，図 3.14 のように Z 変
換領域による表現が与えられる．
例題 3.7Z 変換と複素平面

数列
3.3 Z 変換

41

1.5
1

10

0.5

6
4

虚部

｜X (z )｜

8

2

−0.5

0
2

1

0

−1

虚部

−2

−2

−1

0

1

2

実部

（a）Z 変換

2

0

−1
−1.5

−1.5

−1

−0.5

0
実部

0.5

1

1.5

（b）零極点配置

図 3.15 Z 変換と零極点配置

x[n] = δ [n] + 2δ [n − 1] + 3δ [n − 2]の Z 変換 X(z)を求めて，| X(z ) | のグラフを表示してみよう．また，X( z ) = 0 となる複素平面上での z（零点）を確かめよう．
解
MATLAB によるコマンド例を以下に示そう．
% 数列
x = [ 1 2 3 ];% Z 変換[re,im]=meshgrid(-2:.1:2,-2:.2:2);
z = re+i*im;
X = 0;
for iSample=1:length(x)X = X + x(iSample) * z.^(-iSample+1);end% メッシュ表示figure(1)mesh(re,im,abs(X))
xlabel('Real')
ylabel('Imaginary')
zlabel('|X(z)|')axis([-2 2 -2 2 0 10])
% 零極点配置
figure(2)42

第3章

1 次元信号処理の復習周波数特性 X (e j ω)
信号強度

信号 x [n ]

振幅

DTFT

位相[rad]正規化角周波数Z 変換 X (z )正規化角周波数Z 変換

z ＝ e jω

振幅

時間

虚部

実部

図 3.16 時間，周波数，Z 変換領域の関係

zplane(x)図 3.15 に処理結果を示す．meshgrid 関数は複素平面上の標本位置を生成している．zplane 関
数は図 3.15（b）のように複素平面上の零極点配置を表示する．通常は零極点配置を知るだけで十分なため，図 3.15（a）のような表示までは必要とされない．
Z 変換と複素平面

実習 3.6

M-file ： practice03̲6.m
ほかの数列でも試してみよう．
● 離散時間フーリエ変換（DTFT）との関係
信号 x[n]の Z 変換 X( z )に z = e jω を代入すると，∞X( z) z=e ω = ∑ x[n] e− jωn = X(e jω ), ω ∈ R …………………………………………………………（3.9）
j

n =−∞

という関係が得られ，離散時間フーリエ変換（DTFT）に帰着する．すなわち DTFT は，Z 平面の単位
円周上 z = e jω で X( z )を評価していることにほかならない．
x [n ] ＝ … ＋ 3 δ[n − 0] ＋ 5 δ[n − 1] ＋ 4 δ[n − 2] ＋ …
DTFT

X (e j ω) ＝ … ＋ 3 e − j 0 ＋ 5 e − j ω ＋ 4 e − j 2ω ＋ …

図 3.17周波数特性の例

3.3 Z 変換43x [n ]

図 3.18T {・}y [n ]＝ T { x [n ] }システム

信号 x[n]，周波数特性 X(e jω )，Z 変換 X( z )の間には，図 3.16 に示されるような深い関係がある．結局，図 3.13 の数列は，δ [n − k]を e−jωk に置き換えることで，図 3.17 のような周波数領域による表現と
なる．

3.4

線形時不変システム

以下では，信号処理システムにおいて，最も基本的な線形時不変（LTI ： Linear Time-invariant）シ
ステムについて解説しよう．LTI システムは，そのインパルス応答 h[n]をもって性質を特徴付けることができる．h[n]の DTFT は周波数応答と呼ばれ，周波数領域のシステムの振る舞いを表す．また，
h[n]の Z 変換は伝達関数と呼ばれ，システムの安定判別や実現などに重要な役割を果たす．
● 線形性と時不変性
図 3.18 に，一般的な信号処理システム T{・}を示そう．信号処理システムは，入力信号 x[n]が与えられると別の信号 y[n] = T {x[n]}に変換して出力する．
（1）線形性とはシステム T {・}の線形性は，定数 a，b に対して，{
y1[n] = T{ x1[n]}, y 2 [n] = T {x2[n]}⇒ y[n] = T {ax1[n] + bx2 [n]} = aT {x1[n]} + bT {x2 [n]} ………………………………………………（3.10）と表現することができる．
例題 3.8線形性

次のシステムは線形か．
1．T1 { x[n] } = 2x [n] + x [n − 1]
2．T2 { x[n] } = x2[n] + x [n − 1]
3．T3 { x[n] } = x [2n] + x [n − 1]解T1 {・}，T3 {・}は線形，T2 {・}は非線形である．
（2）時不変性とはシステム T{・}の時不変性は，

y = T {x[n]} ⇒ y[n − k ] = T {x[n − k ]} ………………………………………………………………（3.11）と表現することができる．

44

第3章

1 次元信号処理の復習

例題 3.9

時不変性

次のシステムは時不変か．
1．T1 { x [n] } = 2x [n] + x [ n − 1 ]2．T2 { x [n] } = x2 [n] + x [ n − 1 ]3．T3 { x [n] } = x [2n] + x [ n − 1 ]解T1 {・}，T2 {・}は時不変，T3 {・}は時変である．
● 畳み込み演算
線形時不変システムは，線形性と時不変性を同時に満たす．また，その特徴はインパルス δ [n]に対する応答 h[n]で表現され，システムの振る舞いは，以下に示すとおり入力信号 x[n]とインパルス応答
h[n]の畳み込み演算となる．
∞（ 線形性）（ 時不変性）……………………………………………………………（3.12）

ただし，h [ n ] = T { δ [ n ] }とする．
どのような線形時不変システムも，そのインパルス応答 h [n]をもって特徴付けられることが分かる．
なお，
∞

∞

k=−∞

k=−∞

y [ n ] = ∑ x [ k ] h [ n − k ] = ∑ h [ k] x [ n − k ]………………………………………………………（3.13）が成立することは，畳み込み演算の重要な性質の一つである．
例題 3.10線形時不変システム

入力された信号について，連続するサンプル 3 点の平均を取りながら出力信号を与えるシステム
を考えよう．これは，h[n] = T {δ [n] } = 1/3(δ [n] + δ [n − 1] + δ [n − 2])の線形時不変システムとして解釈できる．入力信号 x[n] = δ [n] + 2δ [n − 1] + 3δ [n − 2]の応答を確かめてみよう．
解
MATLAB では，畳み込み演算を行う関数として conv 関数が用意されている．以下に，MATLAB による処理例を示そう．
% 入力 x[n]x = [1 2 3];% インパルス応答 h[n]3.4線形時不変システム45

x [n ]

3
2
1
0

0

1

2

3

4

5

3

4

5

3

4

5

n

h [n ]

3
2
1
0

0

1

2

n

y [n ]

3
2
1
0

0

1

2

n

図 3.19 線形時不変システムの例（3 点移動平均フィルタ）h = [1 1 1]/3;% 出力 y[n]y = conv(h,x);% x[n] の表示
subplot(3,1,1)
stem(0:length(x)-1,x)axis([0 length(y) 0 3])
xlabel('n');ylabel('x[n]')% h[n] の表示
subplot(3,1,2)
stem(0:length(h)-1,h)axis([0 length(y) 0 3])
xlabel('n');ylabel('h[n]')% y[n] の表示
subplot(3,1,3)
stem(0:length(y)-1,y)axis([0 length(y) 0 3])
xlabel('n');ylabel('y[n]')図 3.19 に MATLAB による演算結果の例を示す．

46

第3章

1 次元信号処理の復習

実習 3.7

線形時不変システム

M-file ： practice03̲7.m
入力信号 x[n]やインパルス応答 h[n]をいろいろ変えて試してみよう．
● 伝達関数と周波数応答
インパルス応答 h[n]の Z 変換∞

H(z) = ∑ h [ n ]z−n …………………………………………………………………………………（3.14）
n =−∞をそのシステムの伝達関数という．伝達関数 H(z)は，入力信号と出力信号の Z 変換 X(z)，Y(z)より，

H(z) =Y (z)…………………………………………………………………………………………（3.15）
X(z)と表現される．また，H(e jω ) = H(z) z=e ω ……………………………………………………………………………………（3.16）
jはインパルス応答 h[n]の DTFT であり，周波数応答と呼ばれる．式（3.15）より，

Y (e jω ) = H(e jω ) X (e jω ) ………………………………………………………………………………（3.17）が成立する．すなわち，時間領域の畳み込み演算は周波数領域における積演算と等価である．
例題 3.11

周波数応答

例題 3.10 の内容を周波数領域で確認してみよう．
解以下に MATLAB による処理例を示そう．ただし，x，h，y は既に計算され，保持されているものとする．
% X(z) の周波数特性
X=freqz(x,1,512);% H(z) の周波数応答
H=freqz(h,1,512);% Y(z) の周波数特性[Y,w]=freqz(y,1,512);% 周波数特性（応答）表示
plot(w/pi,abs(X),'b')hold onplot(w/pi,abs(H),'g:')hold onplot(w/pi,abs(Y),'r-.')legend('X(e^{j¥omega})',...
3.4

線形時不変システム47

6

X (e j ω)
H (e j ω)
Y (e j ω)

5

振幅

4
3
2
1
0

0

0.2

0.4

0.6

0.8

1

正規化周波数[×πrad/サンプル]

図 3.20周波数積の例（3 点移動平均フィルタ）'H(e^{j¥omega})','Y(e^{j¥omega})')grid onhold off
図 3.20 に MATLAB による演算結果の例（振幅のみ）を示す．周波数応答 H(e jω )による入力信号の周波数成分が除去されている様子がよく分かる．
実習 3.8

周波数応答

M-file ： practice03̲8.m
入力信号 x[n]やインパルス応答 h [ n ]をいろいろ変えて試してみよう．
● FIR フィルタと IIR フィルタ
インパルス応答 h [ n ]が無限に広がるものを IIR（Infinite Impluse Response）システム，有限の範囲に収まるものを FIR（Finite Impluse Response）システムと呼ぶ．また，インパルス応答 h[n]が非ゼロの係数を正の時刻（n ≧ 0）でのみもつ場合，そのシステムを因果的（causal）であるという．逆に n < 0で非ゼロ係数をもつ場合，そのシステムを非因果的（non-causal）
であるという．
（1）FIR システム
因果的な FIR システムの畳み込み演算は，
N −1

y[n] = ∑ h[k] x[n − k ] …………………………………………………………………………………（3.18）k=0のように表現でき，伝達関数も
N −1

H(z) = ∑ h[n] z−n ……………………………………………………………………………………（3.19）
n =0

48

第3章

1 次元信号処理の復習

h [N −1]h [0]x [n ]
z

−1

z

−1

z −1

h [1]

x [n ]y [n ]

＋

＋

h [2]

＋

h [2]

＋

h [1]

h [N −1]h [0]（a）直接型

図 3.21y [n ]

＋

z −1
＋

z −1

（b）転置型

FIR システムの構成

x [ n]＋＋

図 3.22

b [0]

＋

a [1]

z

−1

b [1]

a [2]

z −1

b [2]

a [M −1]z −1b [N −1]＋y [n ]

＋
＋

IIR
（再帰型）
システムの構成（便宜上，N ＝ M とした）のように有限な数の項からなる多項式として表現される．
図 3.21 に因果的な FIR システムの構成図を示す．z −1 は 1 サンプルの遅延器を意味する．定数乗算器と加算器の組み合わせによって実現できる．
（2）IIR システム
IIR システムは無限のインパルス応答をもつため，畳み込み演算による実現は困難である．そこで，畳み込み演算の代わりに差分方程式
N −1

M −1

k=0

k=0

y [ n ] = ∑ b [k ] x [ n − k ] − ∑ a [ k ] y [ n − k ] …………………………………………………………（3.20）など，異なる表現を用いて実現される．
差分方程式で表現されるシステムでは，その伝達関数 H(z)はH(z) =

Y (z) B(z) b [ 0 ] + b [1 ] z−1 +  + b [ N − 1 ] z−( N −1)==
X(z) A(z)1 + a [1 ] z−1 +  + a [ M − 1 ]z −( M −1) ………………………………………（3.21）と与えられる．有限な数の係数 b[n]，a[n]から IIR システムを構築することができる．
図 3.22 に差分方程式で表現される因果的 IIR システムの構成図を示す．FIR システムと異なりフィードバック（再帰型の構成）が必要になる．
フィードバックは，そのループ利得に気をつけないと発散を起こし，システムが不安定になる恐れがある．IIR システムは，FIR システムに比べて特性の良いフィルタを少ない資源（リソース）で実現できる利点があるが，安定性に注意しなければならない．
3.4

線形時不変システム

49

×
×

×
1

（a）安定

図 3.23××

1×（b）不安定安定判別の概要（×印は極の位置）（3）安定判別
IIR システムの安定性に関する定義の一つに BIBO（Bounded-in Bounded-out）安定性がある．BIBO
安定なシステムでは，有界な入力 | x[n] | < ∞に対し，有界な出力 | y[n] | < ∞を得る．BIBO 安定性の必要十分条件は以下のとおり．
∞∑ h[ n ] < ∞ ………………………………………………………………………………………（3.22）

n =−∞また，システムが BIBO 判定か否かは，伝達関数 H(z)の極の位置を見ればよい．

• すべての極（pole）が単位円内にあれば安定（図 3.23（a））• 極が単位円外にあれば不安定（図 3.23（b））
例題 3.12安定判別

次の係数をもつシステムが安定か否かを判定してみよう．
1．b[n] = 1/2(δ [n] + δ [n − 1])，a [n] = δ [n] − δ [n − 1]
2．b[n] = 1/2(δ [n] + δ [n − 1])，a [n] = δ [n] − 2δ [n − 1]
3．b[n] = 1/2(δ [n] + δ [n − 1])，a [n] = δ [n] − 1/2δ [n − 1]
解3．のみ安定なシステムであり，1．，2．は不安定なシステムである．以下に，3．の場合について MATLAB による確認例を示そう．
% フィルタ係数b = [1 1]/2;
a = [1 -1/2];% インパルス応答の表示
figure(1)impz(b,a)% Z 平面表示
figure(2)zplane(b,a)% 周波数応答の表示
figure(3)50

第3章

1 次元信号処理の復習

0.8
0.7
0.6

振幅

0.5
0.4
0.3
0.2
0.1
0

0

2

4

6

8

10

12

n（サンプル）

図 3.24

インパルス応答20

10

振幅[dB]

0.8
0.6
0.4

虚部

0.2

−20
−40
−60
0

0

0

−0.2

0.2
0.4
0.6
0.8
正規化周波数[×πrad/サンプル]

1

0.2
0.4
0.6
0.8
正規化周波数[×πrad/サンプル]1

位相[ °]

−0.4
−0.6

−50

−0.8
−1
−1

−0.5

0
実部

（a）極配置

図 3.25

0.5

1

−100
0

（b）周波数応答

安定判別の例

freqz(b,a)
図 3.24 にインパルス応答を，図 3.25 に極配置と周波数応答を示す．impz 関数はシステムのインパルス応答を表示する機能を提供する．impz 関数，zplane 関数，freqz 関数にはいずれも分母多項式 A (z)，分子多項式 B(z)の係数を引き数として与えることができる．
実習 3.9安定判別

M-file ： practice03̲9.m
1．，2．の場合，そのほかの IIR システム，FIR システム
（a[n] = δ [n] ）についても判定判別を試し
てみよう．

3.5

フィルタ設計51

｜H (e j ω)｜

通過域

阻止域
ω
−π

π
遷移域

図 3.263.5周波数応答における主な仕様

フィルタ設計ここまでの解説では，システムが既に与えられていることを前提としてきた．実際は，各種問題に合わせてシステムを設計する必要もあるだろう．以下では，よく用いられるフィルタ設計法の一つとして等リプル FIR 設計（firpm 関数）を紹介しよう．
フィルタ設計では，時間領域で仕様を与える場合，周波数領域で仕様を与える場合，両方の領域
で仕様を与える場合の三つがある．以下では，周波数領域で仕様を与える例を紹介する．
周波数領域で仕様を与える場合は，通常，図 3.26 に示すように通過域，阻止域，遷移域を設定する．通過域は信号を通す周波数帯域，阻止域は信号を阻止する周波数帯域である．遷移域は通過域と阻止域の間の帯域で，設計の評価に含めない．各帯域における誤差（揺らぎ）をリプルと呼ぶ．等
リプル設計法は，各帯域の揺らぎの大きさが一定となるフィルタを与える．なお，設計の原理については文献（1）などを参照されたい．
例題 3.13

フィルタ設計以下の仕様を満たすフィルタを設計しよう．
• 伝達関数の次数： 30（タップ数： 31）• 通過域： 0 ≦ ω < π/2 − π/20
• 遷移域： π/2 − π/20 ≦ ω ≦ π/2 + π/20
• 阻止域： π/2 + π/20 ≦ ω < π• 通過域利得： 1
解firpm 関数を用いて与えられた仕様を満たすフィルタを設計しよう．以下に MATLAB によるコマンド例を示す．
% フィルタ次数nOrder = 30;% 通過域端edgePass = .45;
% 通過域利得52

第3章

1 次元信号処理の復習

−6.1143

振幅[dB]

0.3

振幅

1.30983.4217

0.4

0.2
0.1
0

−15.6503

0

5

10

15

20

25

−10.2167

位相−25.1863−15.9799−34.7223−21.7431−44.2583−0.1−4.4534

振幅

30

0

0.2

0.4

0.6

0.8

位相（rad）

0.5−27.5064

正規化周波数[×πrad/サンプル]

サンプル（a）インパルス応答

図 3.27（b）周波数応答

FIR フィルタの設計例

gainPass = 1;
% 阻止域端edgeStop = .55;
% フィルタ設計（インパルス応答）
h = firpm(nOrder,...
[0 edgePass edgeStop 1], ...
[gainPass gainPass 0 0]);% FIR 直接型構成
Hd = dfilt.dffir(h);% インパルス応答表示
impz(Hd)% 周波数応答表示
freqz(Hd)firpm 関数の第 2 引き数[0 .45 .55 1]の要素は，それぞれ，正規化角周波数 [0, (π/2 − π/20),(π/2 + π/20), π]に対応している．この各角周波数点における振幅の理想値を次の引き数［1 1 0 0］
で与えている．詳しくは，ヘルプまたはドキュメントを参照されたい．図 3.27 に設計したフィル
タのインパルス応答と周波数応答を示す．なお，impz 関数，freqz 関数には直接，インパルス応
答 hを引き数に渡してもよい．
この例題では firpm 関数に与える次数を明示的に与え，通過域と阻止域のリプルを最適化したが，MATLAB では，あらかじめリプルを仕様として与えてフィルタの次数を推定するための firpmord関数が提供されている．例えば，次のように利用できる．
% 通過域端edgePass = .45;
3.5

フィルタ設計53

図 3.28

fdatool の使用例

% 通過域利得
gainPass = 1;
% 通過域許容リプル
deltaPass = .01;
% 阻止域端edgeStop = .55;
% 阻止域許容リプル
deltaStop = .01;
% 次数推定[nOrder,F,A] = ...
firpmord([edgePass edgeStop],...
[ gainPass 0 ],[deltaPass deltaStop]);% フィルタ設計（インパルス応答）
h = firpm(nOrder, F, A);
また，ほかの FIR フィルタ設計関数として，firls，fir1，fir2，maxflat が提供されている．
IIR フィルタの設計には，butter 関数，cheby1 関数，cheby2 関数，ellip 関数，maxflat 関数を利用できる．
だが，何よりもまず fdatool の利用が簡単である（図 3.28）．そのほか，fvtool，sptool といったツール群が用意されているので，ヘルプやドキュメントで確かめてほしい．
54

第3章

1 次元信号処理の復習

実習 3.10

フィルタ設計

M-file ： practice03̲10.m
フィルタの仕様を変えて，さまざまなフィルタを設計してみよう．

章末問題
問題 3.1

音の周波数解析（MATLAB 演習）

次のコマンドを確かめてみよう．
load gong
wavplay(y,Fs)
figure(1)freqz(y,1,length(y),Fs)
figure(2)specgram(y,128,Fs)
さらに，1 行目で load chirp として，結果を比較してみよう．
問題 3.2窓関数の設計（MATLAB 演習）

MATLAB の wintool 関数で，各種窓関数を設計してみよう．
問題 3.3窓関数の応用（MATLAB 演習）

連続信号 x ( t ) = cos (2 π t + π/2 ) + 2 cos (4 π t )に対し，標本化周期 1/8［sec］で標本化し，離散時間信号を与えよう．また，適当な窓を掛けてスペクトラムを観察してみよう．興味があれば，窓長，DFT 点数などを変えてみよう．
問題 3.4

移動平均フィルタ（MATLAB 演習）

N（＞ 3）点移動平均フィルタ

h [n] =

1
, n = 0, 1, , N − 1
Nの振幅応答と位相応答を確かめてみよう．
問題 3.5フィルタの利得（MATLAB 演習）

h [n] = δ [n] + δ [n − 1] + δ [n − 2]で与えられるフィルタと例題 3.10 の 3 点移動平均フィルタを，振幅応答と位相応答を用いて比較してみよう．また，同じ入力 x[n]に対する処理結果の違いも比較してみ
よう．

章末問題

55

問題 3.6

フィルタ処理（MATLAB 演習）

連続信号 x(t) = cos (2 π t + π /2) + 2 cos (4 π t )に対し，サンプリング周期 TS = 1/8［sec］で標本化を施し，離散時間信号を生成しよう．ただし，時間幅は 8［sec］とする（64 点）．さらに，4 点の移動平均フィルタを掛けてスペクトラムを確認してみよう．
問題 3.7

フィルタ設計（MATLAB 演習）

次のように生成した信号 x
load gong
x1 = y;load chirp
x2 = y;x = x1(1:length(x2)) + x2;に対して，例題 3.13 で設計したフィルタを使ってフィルタリングを施し，例題 3.10 のようにフィルタ
前後の信号の周波数特性を比べてみよう．また，wavplay 関数を用いてそれぞれの信号を聞き比べ
てみよう．
参考文献
（1）尾知博；シミュレーションで学ぶディジタル信号処理，CQ 出版社，2001 年．
（2）佐川雅彦，貴家仁志；高速フーリエ変換とその応用，昭晃堂，1992 年．

56

第3章

1 次元信号処理の復習

第4章

画像処理の基礎

本章では，MATLAB における画像処理の基本的な操作法や便利な関数について紹介し，ガンマ補
正やヒストグラム均等化などの画素処理や，色空間変換などの色情報処理について簡単に解説しよう．

4.1

画像・映像表現の概要

画像・映像信号処理について述べる前に，まず，これらの信号がどのように標本化されているかを考えておかなければならない．
多次元信号の標本化における自由度については，第 8 章以降に解説することとし，ここでは，1 次
元信号処理の拡張から与えられる方形標本化について概説する．また，今後のために多次元信号の配列表現を確認しておく．
● 方形標本化の概要（1）方形標本化とはセンサを配列状に並べた CCD や CMOS などのセンサ・アレイを用いることで，センサ上に写像された光の強さの分布，すなわち画像を標本化できる．このような過程を経て得られる画像信号は，
図 4.1 に示されるように空間的に離散的な信号となる．ここで取得された一つ一つの値は，1 次元の場合と同様に標本値と呼ばれるが，画像の場合は特に画素値と呼ばれることが多い．
センサ上に映る光の強さの分布は，垂直方向の連続変数 p0 と水平方向の連続変数 p1 を用いて，x(p0,p1) と表現される．一方，標本化後の離散信号は垂直方向の離散変数 n0 と水平方向の離散変数 n1 を用
いて x[n0, n1] と表現され，x( p0, p1) とは x[n0, n1] = x(n0P0, n1P1) のように関係づけることができる．
ここで，P0，P1 は空間的な標本化周期を表している．このように各連続変数 p0，p1 の方向に対して独立な標本化周期を用いると，図 4.1 に示されるように標本位置が各変数軸と直角に交わる格子上に位置することとなる．このような標本化は方形標本化と呼ばれ，もっとも素直な方法である．
なお，変数 p0，p1 および標本化周期 P0，P1 には空間的な単位［dpi（dot per inch）など］があるが，画像の場合，センサの大きさや画素数によってこれらの値は異なり，不明なままでも問題にならな
4.1

画像・映像表現の概要

57

p1

n1

p0

n0

（a）標本化前（b）標本化後

図 4.1 センサ・アレイによる画像の標本化いことが多い．音声信号の標本化周期 T［sec］と異なり，大型テレビや携帯端末などで，空間標本化
周期を無視した信号再構成が日常的に行われていることを想像してもらえればよい．むしろ，画像の場合は画素数が重視される．
（2）配列表現
標本化後の信号は離散的な変数を持つため，配列として表現される．画像の場合，図 4.2 に示されるように，左上を原点として水平方向を右向きに，垂直方向を下向きに座標軸をとることが多い．
配列を行列で表現しやすいこと，従来の撮像管などの電子ビームの走査に対応することが主な理由である． 例えば，垂直解像度×水平解像度 =N0 × N1 の画像の場合，各画素値を用いて N0 × N1 行列 X
として

x [ 0, N1 − 1 ] ⎞x [1, N1 − 1 ] ⎟⎟⎟⎟x [ N0 − 1, N1 − 1 ]⎠

…

…

…

…

…
x [ 0, 0 ]⎛ x [ 0, 0 ]⎜ x [1, 0 ]…
x [1, 1 ]X=⎜⎜⎜
⎝ x [ N0 − 1, 0 ] x [ N0 − 1, 1 ] …
のように表現される．
（3）量子化

なお，ディジタル信号として画像を取得するためには，標本化後に量子化を施し，画素値の離散化を行う必要がある．1 画素当たり b［bpp］注 4-1 の画像の階調数は L = 2b となる．したがって，モノク
ロ画像の場合，総ビット数 S は，

S = N0 × N1 × b [bits]となる．
アニメのような限定色画像の場合，インデックス方式を用いることでデータ量を減らすことができる．インデックス方式とは，色情報をもったカラー・マップとそのインデックスからなる配列によってカラー画像を表現する方式である．一方，RGB の画素値をもつ配列によって表現する方式を
注 4-1 ： bits per pixel．

58

第4章

画像処理の基礎

原点
0
1
2
3

01 23

…………

N1− 1

n1

…………

N0− 1
n0

図 4.2 画像の配列表現

トゥルー・カラー方式と呼ぶ．以降，断りなくトゥルー・カラー方式を前提とする．
（4）映像信号
センサ・アレイ上へ写像された光の強さの分布の時間変化を取得することで，映像信号（動画像）を得ることができる．もとの連続信号は，空間変数 p0，p1 に時間変数 t を加えることで，x( p0, p1, t)と表現される．一方，標本化後の離散信号は空間変数 n0，n1 に時間変数 k を加えることで，x[n0, n1, k]と表現され，x( p0, p1, t)とは x[n0, n1, k] = x(n0P0, n1P1, kT )のように関係づけられる．ここで，T は標
本化周期を表している．この関係では，標本化周期が各軸に独立に与えられているため，3 次元の方形標本化ということができる．1 画素当たり b ビット（b bpp）のモノクロ映像の場合，1 秒当たりのビット数（ビット・レート）R は，

=

0

1

1

［bps］注 4-2

となる．

4.2

MATLAB での画像処理

ここでは，MATLAB で画像信号を取り扱うための基本的な操作についてまとめる．画像の表現や入出力が MATLAB 上による処理に与える影響が大きいため，特に画像データのハンドリングに焦点を当てよう．
● 画像の表現と入出力（1）画像の表現
MATLAB はさまざまなデータ・タイプを定義しているが，画像データに対しては特に次のデー
タ・タイプがよく利用される．
• logical ：バイナリ｛ true, false ｝
注 4-2 ： bits per second．

4.2

MATLAB での画像処理

59

1
2
3

1 2 3

水平
…

nCols
iCol

垂
直⁝
nRows
pictureGrayiRow（a）モノクロ画像
iCmp
色成分 2

3

1

iCol

＝
iRow

pictureRgb（b）カラー画像

図 4.3

MATLAB 上の画像表現• uint8 ：符号なし 8 ビット整数［0 255］

• uint16 ：符号なし 16 ビット整数［0 65535］• double ：倍精度浮動小数点数［0.0 1.0］

データ量は，logical ＝ uint8 ＜ uint16 ＜ double の順で大きくなるが，処理の制約は double＜
uint16 ＜ uint8 ＜ logical の順で大きくなる．
モノクロ画像は，輝度成分のみの配列として表現できる．また，カラー画像は，原則として赤（R）
成分，緑（G）成分，青（B）成分からなる配列として表現できる．図 4.3（a）に示すように，MATLAB
上では，モノクロ画像は左上を頂点とする 2 次元配列として表現される．また，図 4.3（b）に示すように，カラー画像は R 成分の左上を頂点とする配列として表現される．ここで，MATLAB 上の配列のインデックス番号は 1 から始まることに注意されたい．
以降，MATLAB のプログラム例では，• iRow ：行インデックス• iCol ：列インデックス• iCmp ：色成分インデックスという変数を用いて，すべて 1 から開始するものとする．一方，文章中の説明ではほかの文献との整合性をとるため，図 4.2 に示すとおり，配列の原点は 0 から開始するものとする．変数の対応関係を
表 4.1 に示す．なお，nRows ＝ N0，nCols ＝ N1 という関係が成り立つ．モノクロ画像 pictureGray
表 4.1
MATLAB プログラムと解説の変数の対応

60

第4章

画像処理の基礎iRow
n0 ＋ 1iCol
n1 ＋ 1iCmp（
1 R），2（G），3（B）

double は
uint8 の 8 倍

約 500K バイト

RGB は
GRAY の 3 倍
約 12M バイト

図 4.4

MATLAB 上のデータ・サイズの比較の iRow 行 iCol 列の画素値は，pictureGray(iRow,iCol)と表現され，カラー画像 pictureRgb の iRow 行 iCol 列 iCmp 成分の画素値は，pictureRgb(iRow,iCol,iCmp)と表現される．
例題 4.1

データ・サイズ

さまざまな表現形式の配列について，データ・サイズを比較してみよう．
解
次のコマンドを実行した結果を図 4.4 に示す．
clear all;nRows = 612;
nCols = 816;
pictureGray = ... % モノクロ uint8
zeros(nRows,nCols,'uint8');
pictureGrayDouble = ... % モノクロ double
zeros(nRows,nCols,'double');pictureRgb = ... % カラー uint8
zeros(nRows,nCols,3,'uint8');
pictureRgbDouble = ... % カラー double
zeros(nRows,nCols,3,'double');clear nRows nCols
whos
結果より，pictureRgbDouble は pictureGray の 24 倍もの記憶容量を要することが分かる．
4.2

MATLAB での画像処理

61

メモリの有効利用という観点から，表現形式の選択が重要であるといえる．
実習 4.1

データ・サイズM-file ： practice04̲1.m
大きさや形式を変えてデータ・サイズを比較してみよう．また，uint16 型や logical 型についても調べてみよう．バイナリ画像は次のように与えると良い．
% バイナリ logicalpictureBinary = ...
logical(zeros(nRows,nCols));● 画像の入力
画像ファイルの入力には，imread 関数と fread 関数が利用できる．それぞれの機能を以下にまとめる．

• imread ： JPEG，TIFF など，標準形式に対応したファイル入力• fread ： RAW（生）など，一般的なバイナリ・データのファイル入力（1）imreadimread 関数は，その引き数にファイル名を指定するだけで，画像ファイルを配列として読み込む．
カラー画像の場合，通常，RGB カラー空間上の 3 次元配列（サイズ N 0 × N 1 × 3，uint8 型）としてワークスペースに取り込まれる．詳細については，ドキュメントを参照されたい．なお，カラー画
像のままではメモリの無駄遣いとなるので，モノクロ画像に変換して処理したい場合がある．この場合，次の変換式で各画素ごとの輝度成分 Y を計算することができる．

xY = 0.2989 xR + 0.5870 xG + 0.1140 xB …………………………………………………………………（4.1）
なお，Image Processing Toolbox では，この変換のために rgb2gray 関数が用意されている．
例題 4.2

imread の使用例

firenzeRgb.jpg というカラー画像を読み込み，モノクロ画像に変換しよう．
解
以下に，MATLAB による処理例を示す．
% カラー画像の読み込み
pictureRgb = imread('./data/firenzeRgb.jpg');% モノクロ画像への変換
pictureGray = uint8( ...
0.2989 * pictureRgb(:,:,1) + ... % R
0.5870 * pictureRgb(:,:,2) + ... % G
0.1140 * pictureRgb(:,:,3) % B
);
62

第4章

画像処理の基礎図 4.5fread 関数による読み込み/fwrite
による書き込み順序% メモリ節約のため利用しない配列はクリアする
clear pictureRgb;（2）freadfread 関数は，汎用的なファイル読み込みの関数である．ヘッダ情報のない RAW 画像や独自のフォーマットで記録された画像データの読み込みに使える．以下に，fread 関数の使用例を示そう．
% 画像サイズ

高さ×幅

frameSize = [612 816];
nPixels = prod(frameSize);% 読み込み精度を uint8 に設定
precision = 'uint8=>uint8';% 読み込みモード'r' にてファイルをオープン
fileId = fopen('./data/firenze.yyy', 'r');% 画像データを列ベクトルとして読み込む
pictureGray = ...
fread(fileId, nPixels, precision);
fclose(fileId);% 列ベクトルを配列に変換
pictureGray = ...
reshape(pictureGray, frameSize);fread 関数は，データを列ベクトルとして読み込むことに注意してほしい．今，ファイル
firenze.yyy は，1 画素 8 ビットの画像データを左上から図 4.5 のように走査したバイト列が記録されていると仮定している．これは行列操作を基本とする MATLAB の特徴的な点で，水平走査に慣れた画像処理技術者は注意が必要である．水平走査（行ベクトル）を優先して保存されたファイルの場
合，reshape 後に配列を転置する必要がある．
● 画像の表示ワークスペースに取り込んだ画像や処理を施した画像を実際に目で確かめたい場合，image 関数を使って画像を表示することができる．Image Processing Toolbox では，image 関数の代わりに表示
4.2

MATLAB での画像処理

63

の最適化を行う imshow 関数や，さらに高機能な imtool 関数を利用できる．
uint8 型の場合，画素値の範囲が 0 〜 255，double 型の場合，画素値の範囲が 0.0 〜 1.0 に設定されていれば，画面上に適切に表示される．
例題 4.3

画像表示

ファイル firenzeRgb.jpg を読み込んで，カラー画像とモノクロ画像の表示を行ってみよう．
また，double 型に変換したカラー画像についても表示してみよう．
解
以下に，MATLAB による処理例を示す（Image Processing Toolbox がある場合， image 関数を
すべて imshow 関数で置き換えることをお勧めする）．
% 画像ファイルの読み込み
pictureRgb = imread('./data/firenzeRgb.jpg');% カラー画像(uint8) の表示
figure(1);image(pictureRgb);
axis image; axis off;
% モノクロ画像への変換
pictureGray = ...
（省略）% 例題 4.2 を参照% モノクロ画像(uint8) の表示
figure(2);image(pictureGray); colormap(gray(256));
axis image; axis off;
% 倍精度への変換
pictureRgbDouble = ...
double(pictureRgb)/255.0;% カラー画像(double) の表示
figure(3);image(pictureRgbDouble);axis image; axis off;
imshow 関数と imtool 関数では，モノクロ画像とカラー画像の違いを意識せずに利用できる．一方，image 関数については，モノクロ画像表示のときにカラー・マップの指定と軸（axis）の設定を行
わないと，適切に表示されない．
実習 4.2

画像表示

M-file ： practice04̲2.m
64

第4章

画像処理の基礎

例題において，double 型のスケーリング（255.0 による除算）を行わないとどのように表示されるかを確かめてみよう（Image Processing Toolbox には，画像データを double 型に変換する
im2dobule 関数が用意されている．この関数を利用すると，スケーリングも同時に自動で行われる）．
● 画像の出力
ワークスペース上の画像データをファイルに出力するため，imwrite 関数と fwrite 関数が利用できる．それぞれの機能を以下にまとめる．

• imwrite ： JPEG，TIFF など，標準形式に対応したファイル出力• fwrite ： RAW（生）など，一般的なバイナリ・データのファイル出力（1）imwrite
imwrite 関数は，カラー/モノクロの判別や uint8/double の判別も自動で行い，ワークスペース
上の画像データを指定されたフォーマットでファイルに書き込む．
例題 4.4

画像出力

firenzeRgb.jpg を読み込み，TIFF 形式にて保存しよう．また，double 型のモノクロ画像に変換し，JPEG 形式にて保存しよう．
解以下に，MATLAB での処理例を示す．
% 画像ファイルの読み込み
pictureRgb = imread('./data/firenzeRgb.jpg');% カラー画像(uint8) の TIFF 形式での書き出し
imwrite(pictureRgb, 'firenzeRgb.tif');% モノクロ画像(double) への変換
pictureGrayDouble = ...
double(rgb2gray(pictureRgb))/255.0;% モノクロ画像(double) の JPEG 形式での書き出し
imwrite(pictureGrayDouble, ...
'data/firenzeGray.jpg');
実習 4.3

画像出力

M-file ： practice04̲3.m
JPEG 形式，TIFF 形式以外のフォーマットについても試してみよう．また，double 型への変換の際のスケーリングを行わないと，どのように保存されるかを確かめてみよう．

4.2

MATLAB での画像処理

65

（2）fwrite
fwrite 関数の使用例を以下に示そう．
% バイナリ書き込みモード(wb) でファイルをオープン
fileId = fopen('firenze.yyy','wb');% pictureGray を uint8 にて保存
fwrite(fileId, pictureGray, 'uint8');% ファイルをクローズ
fclose(fileId);
fwrite 関数は，指定されたファイルに配列を記録する．上記の例では，バイナリ書き込みモードと uint8 の精度が選択されているので，配列はバイト列として保存される．このとき列ベクトルが優先され，図 4.5 に示す順序となることに注意されたい．水平走査（行ベクトル）を優先したい場合，
配列をあらかじめ転置してから fwrite 関数に渡す必要がある．

4.3

MATLAB による映像処理

ここでは，MATLAB で映像データを取り扱うための基本的な操作についてまとめる．
● 映像の表現
MATLAB では，映像データをマルチフレーム方式かムービー（MOV）方式のいずれかで取り扱うと便利である．なお，本書の MATLAB のプログラム例では，フレーム番号を表すために
iFrame ：フレーム・インデックスという変数を用い，1 から開始するものとする．文章中の説明では，ほかの文献との整合性をとるため，フレーム時刻 k を 0 から開始するものとする．すなわち，iFrame = k + 1 と関係する．
（1）マルチフレーム方式
マルチフレーム方式は，映像を 4 次元配列として表現する方法である．RGB カラー画像が 3 次元配列として表現されるが，これに時間軸を加えた 3 次元配列の列（画像シーケンス）である．マルチフ
レーム方式では輝度成分のみのモノクロ映像も 4 次元配列として表現する．RGB カラー映像 multi
FramesRgb の iRow 行 iCol 列 iCmp 成分 iFrame フレームの画素値はmultiFramesRgb(iRow,iCol,iCmp,iFrame)と表現され，モノクロ映像 multiFramesGray の iRow 行 iCol 列 iFrame フレームの画素値はmultiFramesGray(iRow,iCol,1,iFrame)と表現される．
（2）ムービー方式
ムービー（MOV）方式では，図 4.6 に示すように 2 次元（モノクロ）配列，あるいは 3 次元（RGB カラー）配列をメンバとしてもつ frame 構造体の列として映像を表現する．frame 構造体は，cdata と
map というメンバからなり，それぞれが画像配列とカラー・マップを保持する．モノクロ映像
frameSeqGray の iFrame フレーム iRow 行 iCol 列の画素値は66

第4章

画像処理の基礎

時間
3 …

2

1

iFrameiCol
iRow

frameSeq

図 4.6
ムービー（MOV）方式

frame ＝｛ cdata ，map ｝（構造体）

frameSeqGray(iFrame).cdata(iRow,iCol)と表現され，RGB カラー映像 frameSeqRgb の iFrame フレーム iRow 行 iCol 列 iCmp 成分の画素値はframeSeqRgb(iFrame).cdata(iRow,iCol,iCmp)と表現される．RGB カラー画像の場合，colormap は無視されるので必要ないが，モノクロ画像の場
合は，適切な colormap として gray を与える必要がある（すなわち，インデックス画像として扱われる）．
● 映像の入力
映像ファイルの入力には，aviread 関数の利用が便利である．場合によっては，imread 関数や
fread 関数を利用した映像ファイルの入力も必要となる．それぞれの機能を以下にまとめる．

• aviread ： AVI 形式に対応したファイル入力．ワークスペース・データとして MOV を作成．

• imread ： JPEG，TIFF など，標準形式のフレーム画像ファイル入力に利用可能．im2frame関数と組み合わせて MOV への変換も可能．

• fread ： YCbCr（生）など，一般的なバイナリ・データのファイル入力．

fread 関数の利用例については，後ほど例題 4.9 で紹介する．
（1）aviread

imread 関数は，その引き数に AVI 形式のファイル名を指定するだけで，映像をムービー（MOV）
データとして読み込む．frame2im 関数と合わせて利用すると，フレーム画像（frame 構造体）から画像データ（cdata）を配列として抽出できる．以下に使用例を示そう．
% AVI 形式ファイルを読み込み
frameSeq = aviread('calcio.avi');% 最初のフレームから画像データを抽出
pictureRgb = frame2im(frameSeq(1));% 抽出した画像データを表示
4.3

MATLAB による映像処理67image(pictureRgb);（2）imreadimread 関数は，フレームごとに分かれて保存されている映像データの読み込みに利用できる．
im2frame 関数と組み合わせて利用することで MOV への変換も可能である．Image Processing
Toolbox がある場合，いったんマルチフレーム方式で映像を保存すると immovie 関数によって MOVへ変換できる．
例題 4.5

フレーム画像列の読み込み

フレーム画像列 calcio000.jpg，calcio001.jpg，…，calcio149.jpg を MOV データに変換
しよう．
解
以下に，MATLAB による処理例を示す．
nFrames = 150;
for iFrame = 1:nFrames
fileName = ...
sprintf('calcio%03d.jpg', iFrame-1);
pictureRgb = imread(fileName);frameSeq(iFrame) = ...
im2frame(pictureRgb);
end
Image Processing Toolbox がある場合は，次のように処理することも可能である．
nFrames = 150;
for iFrame = 1:nFrames
fileName = ...
sprintf('calcio%03d.jpg', iFrame-1);
pictureRgb = imread(fileName);
multiFramesRgb(:,:,:,iFrame) = ...
pictureRgb;
endframeSeq = immovie(multiFramesRgb);● 映像の表示ワークスペース上の MOV データは，movie 関数を使って映像を表示できる．
例題 4.6

映像表示

フレーム・レートが 30［fps］注 4-3 の映像ファイル calcio.avi を読み込み，movie 関数により 368

第4章

画像処理の基礎

回繰り返して表示してみよう．
解
以下に，MATLAB での処理例を示す．
% ファイル名
fileName = 'calcio.avi';% AVI ファイル情報の取得
fileInfo = aviinfo(fileName);% フレーム・レート情報の取得
frameRate = fileInfo.FramePerSecond;% AVI ファイルの読み込み
frameSeq = aviread(fileName);% 繰り返し回数
nRepeats = 3;
% 映像表示movie(frameSeq, nRepeats, frameRate);
大きなデータはメモリ領域を圧迫するので，次に紹介する AVI 形式による出力を行い，ほかのツールで表示することをお勧めする．movie は簡易ビューワとして利用するとよい．なお，image 関
数と drawnow 関数の併用でもフレーム画像列を映像として表示できる．ただし，フレーム・レート
は制御できない．
実習 4.4

映像表示

M-file ： practice04̲4.m
フレーム画像列 calcio000.jpg，calcio001.jpg，…，calcio149.jpg を読み込んで，movie 関数により表示してみよう．繰り返し回数やフレーム・レートを変えて表示を確かめてみよう．
● 映像の出力
ワークスペース上の映像データをファイルに出力するため，movie2avi 関数，および avifile 関
数と addframe 関数の組み合わせを利用できる．imwrite 関数によるフレーム画像列の出力や，汎用の fwrite も利用できる．それぞれの機能を以下にまとめる．
• movie2avi ： MOV データを AVI 形式でファイル出力• avifile，addframe ：フレーム画像列を AVI 形式にてファイル出力• imwrite ： JPEG，TIFF など，標準形式のフレーム画像ファイル出力に利用可能．frame2im
注 4-3 ： frames per second．

4.3

MATLAB による映像処理

69

関数と組み合わせて MOV からの変換も可能．

• fwrite ： YCbCr（生）など，一般的なバイナリ・データのファイル出力以下では，avifile 関数と addframe 関数を併用する方法について解説する．
avifile 関数は，MATLAB ワークスペース上に AVI 形式のファイル・オブジェクトを生成する．
addframe 関数はこの AVI 形式のファイルにフレーム画像（frame 構造体）を追加する機能をもつ．オブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ に な じ み の あ る 読 者 に は ， avifile 関 数 は コ ン ス ト ラ ク タ ，addframe 関数はメンバ関数（メソッド）と説明すると理解しやすいだろう．以下では，映像信号の入出力の具体例として，フレーム画像列 calcio000.jpg，calcio001.jpg，…，calcio149.jpg を読み込んで AVI ファイルを作成するプログラムを掲載する．
nFrames = 150;
frameRate = 30;% 出力ファイル
fileNameOut = 'calcio.avi';clear mex;
aviObj = avifile(fileNameOut,...
'FPS',frameRate,...
'COMPRESSION','None');% フレームごとの処理
for iFrame = 1:nFrames% 現フレームの読み出し
fileNameIn = sprintf('calcio%03d.jpg', ...
iFrame-1);
picture = imread(fileNameIn);% フレームの出力
aviObj = addframe(aviObj,...
im2frame(picture));end
aviObj = close(aviObj);

4.4

画素処理

ある用途に適した画像を得るために原画を処理することを画像強調という．画像強調は，用途ごとに適切に選択しなければならない．例えば，X 線画像に適した処理が，火星探索機で撮影した画像に適するとは限らない．画像強調処理は，大きく分けて空間領域処理と周波数領域処理に分類できる．ここで解説する画素処理は，空間領域処理の一種で原画の各画素ごとの輝度値や色度の変換を行う．空間領域処理には，ほかに近傍処理がある．近傍処理はマスク処理，あるいはフィルタ処理
70

第4章

画像処理の基礎

1

0.8

γ = 0.0625
γ = 0.1250
γ = 0.2500
γ = 0.5000

0.6yγ = 1.0000
0.4

γ = 2.0000
γ = 4.0000

0.2

図 4.7
累乗則変換

0
0

γ = 8.0000
γ = 16.0000
0.2

0.4

0.6

0.8

1

x

とも呼ばれる．近傍処理については次章で詳しく解説する．
輝度値変換を行う画素処理は，

y = T ( x) …………………………………………………………………………………………………（4.2）と表現できる．ここで x は入力輝度値，y は出力輝度値であり，T が変換を表す．変換 T としてネガ
ポジ変換やしきい値処理など，さまざまな関数を選択できる．T として階調数を減らす関数を選べば量子化となるが，これも一種の画素処理といえる．以下では，画素処理の代表例として累乗則変換とヒストグラム均等化について解説しよう．
● 累乗則変換，ガンマ補正（1）累乗則変換
いま，話を簡単にするため画素値の範囲を［0.0 1.0］と仮定する．累乗則変換はT ( x) = xγ ………………………………………………………………………………………………（4.3）と表現できる．図 4.7 に式（4.3）で与えられる関数のグラフを示そう．γ はパラメータで，この選択によって以下の機能が与えられる．

• γ ＜ 1 ：暗部を明るくする効果• γ ＞ 1 ：明部を暗くする効果

例題 4.7累乗則変換

ファイル firenzeRgb.jpg を読み込んでモノクロ画像に変換し，γ = 0.25 を用いて累乗則変換を施してみよう．
解
ファイル読み込みとモノクロ画像への変換の後の MATLAB による処理例を，以下に示す．
parameterGamma = 0.25;: （省略）
4.4

画素処理

71

（a）処理前

図 4.8（b）処理後累乗則変換の例% モノクロ画像を double に変換
pictureGrayDouble = ...
double(pictureGray)/255.0;% 累乗則変換pictureCorrected = ...
pictureGrayDouble.^parameterGamma;: （省略）
モノクロの原画像を図 4.8（a）に，γ = 0.25 の累乗則変換を施した画像を図 4.8（b）に示す．明るい
画像に変換されることが確認できる．
Image Processing Toolbox がある場合，累乗則変換に imadjust 関数を以下のように用いることができる．
pictureCorrected = ...
imadjust(pictureGray,[],[],...
parameterGamma);
imadjust 関数では，double 型への変換は必要ない．
実習 4.5累乗則変換

M-file ： practice04̲5.m

γ = 0.25 以外の値でも累乗則変換を試してみよう．
（2）ガンマ補正
累乗則変換はガンマ補正にも利用される．図 4.9 にガンマ補正の概略図を示す．一般に，表示機器において信号電圧 vd と表示輝度 Bd の間には，おおよそ
72

第4章

画像処理の基礎撮像

表示（補正なし）

暗く表示
ガンマ補正

ガンマ特性

表示
（補正あり）

ガンマ特性

図 4.9

Bd ∝ v dγ

正しく表示

ガンマ補正

d

_ 2.2 〜 2.5 といわれている．このような特性をガンマ特性とという関係が成り立つ．CRT の場合，γ d ∼呼ぶ．一方，撮像機器においても照度 Bc と信号電圧 vc の間に

vc ∝ Bc−γc_ 1.0，ビジコン_ 1.7，といわれている．
という関係が成り立つ．CCD の場合は γ c ∼（撮像管）の場合は γ c ∼このような表示機器と撮像機器を接続しても，正しい階調による表示は不可能である．この系全体の入出力が比例するように施す処理をガンマ補正とよぶ．なお，ITU-R BT.709 勧告ではガンマ補
正を

 4.5 xy=0.45
1.099 x − 0.099

x < 0.018…………………………………………………………………（4.4）
x ≥ 0.018と規定している．表示機器のガンマ値 γ d を約 2.2 と仮定し，立ち上がり部分に若干の線形性を与えた関数となっている．
● ヒストグラム処理
累乗則変換は，γ の選択によって画像の明暗を制御でき，単純ではあるが視覚的な効果が大きい．
ただし，個々の画像について適切な γ を設定する必要がある．明るい画像の明度を落とす，暗い画像の明度を上げる，といった処理を自動で適応的に行えれば，パラメータ設定の煩わしさがなく便利である．ヒストグラム均等化は，与えられた画像に適した画素値変換 T(x)を作成し，どのような明るさの画像でも類似した明るさの処理結果を与える．
（1）ヒストグラム
話を簡単にするため，モノクロ画像を考える．ヒストグラムとは，画像内の輝度値 x の度数 hx をグ
ラフ表示したものである．8 ビット・モノクロ画像の場合，x は 256 種類の値を取りうる．図 4.10 に 8
ビット・モノクロ画像のヒストグラムの例を示そう．
x の画素数を hx とすると，正規化度数 px が
4.4

画素処理

73

hx

（a）暗い画像hxxhx（b）明るい画像hxx（c）低コントラスト画像

図 4.10xx（d）高コントラスト画像

画像のヒストグラムの例

px =

hx
…………………………………………………………………………………………………（4.5）
Nと定義される．ここで，N は総画素数を意味する．正規化度数 px は，必ず 0 以上 1 以下の値となる．
（2）ヒストグラム均等化
ヒストグラム均等化は，処理後のヒストグラムが一様になるような画素値変換 T(x)を作成する．
結果として，明るい画像に対しても，暗い画像に対しても同じようなヒストグラムをもつ出力が得られる．
ヒストグラム均等化の変換 T(x)は，正規化度数 px からx

y = T ( x) = ( L − 1)∑ pu, x = 0, 1, 2, … , L − 1 …………………………………………………………（4.6）
u =0と与えればよい．L は画素値の階調数であり，8 ビットの場合は 256 となる．必要に応じて y の整数化を行う．ここでは x を符号なしの整数値であると仮定したが，実数値に対する変換 T(x)を得ることは容易である．

x式（4.6）は，x が連続で，その確率密度関数 p(x)が与えられたとき，その累積密度関数 c(x) = ∫0 p(u)du が一様分布を与える変換となることに基づいている．ディジタル画像では，x が離散であるため正当性はないが，実用的である点から広く利用されている．
例題 4.8

ヒストグラム均等化

図 4.11（a）の配列に対してヒストグラム均等化を施してみよう．ただし，L = 8 としよう．また，
出力 y を小数点以下第 1 位で四捨五入して整数化しよう．
74

第4章

画像処理の基礎

3

3

5

5

3

3

2

2

1

2

4

6

6

4

1

3

3

4

4

4

4

3

1

4

4

4

5

3

2

4

2

4

4

2

4

3

2

3

1

2

2

1

2

2

1

0

0

14
12
10
画素数 hx4864（a）処理前の配列

2
0

0

1

2

3
4
5
輝度値 x

6

7

（b）処理前のヒストグラム
4

4

7

7

4

4

3

3

1

3

4

7

7

6

1

4

4

6

6

6

6

4

1

6

6

6

7

4

3

6

3

6

6

3

6

4

3

4

1

3

3

1

3

3

1

0

0

12
10
画素数 hy

6

14

8
6
4

（c）処理後の配列

2
0

0

1

図 4.11
ヒストグラム均等化の例
表 4.2

1
6
6/48

3
4
5
輝度値 y

表 4.3
2
3
4
11
10
14
11/48 10/48 14/48

67（d）処理後のヒストグラム

度数分布表
0
2
2/48

x
hx
px

2

5
3
3/48

6
2
2/48

7
0
0

x
y

ヒストグラム均等化の画素値変換表
0
0

1
1

2
3

3
4

4
6

5
7

6
7

7
7

解
与えられた配列より総画素数 N は，6 × 8 ＝ 48 である．よって，正規化度数 px は表 4.2 に示す結果となる．
表 4.2 より，ヒストグラム均等化を行う画素値の変換式が次のように与えられる．

2= 0.291748
6
T (1) = T (0) + 7 ×= 1.1667
48…

T (0) = 7 ×

T (7) = T (6) + 7 × 0 = 7.000
上式より，画素値を小数点以下第 1 位で四捨五入して変換表を作成すると，表 4.3 が得られる．
なお，Image Processing Toolbox がある場合， histeq 関数でヒストグラム均等化を施すことができる．また，imhist 関数で画像のヒストグラムを表示できる．
4.4

画素処理

75

実習 4.6

ヒストグラム均等化

M-file ： practice04̲6.m
ファイル firenzeRgb.jpg を読み込んでモノクロ画像に変換し，ヒストグラム均等化を施して
みよう．

4.5

色空間

ここでは，カラー画像を扱う際に重要な色空間について概説しよう．色空間は座標軸系と部分空間から定義され， 各色は色空間内の一つの点として表現される．たとえ，読者の皆さんと筆者が同じデータ配列を共有していても，色空間を共有していなければ同じ画像を共有していることにはならない．また，カラー画像を処理する場合，人間の心理的感覚に近い色空間を選択しないと，期待した効果を得られないこともある．
色空間には RGB 空間以外にもさまざまなものが存在する．幸い，広く利用されている色空間の間では相互変換の手段が与えられるので，それらの間を往来できる．以下では，RGB 空間とそのほかの例として YCbCr 空間，および HSI 空間を紹介しよう．
● RGB 空間
ちゅうしんか

人間の眼球の奥深くの網膜上に中心窩 という部分がある．中心窩には，約 575nm，約 535nm，約445nm の光にピークを持つ 3 種類の錐体と呼ばれる感覚細胞が集中して存在している．眼球が，ある物体に焦点を合わせることとは，中心窩付近にその物体の像を結ぶことである．人間は，この像のスペクトラム分布をおおよそ赤，緑，青の組み合わせとして感覚し，色を知覚する．
RGB 空間は心理物理的な色表現を与える空間として，撮像機器，表示機器共に広く利用されている．図 4.12 に 3 次元座標上の RGB 空間と色の関係を示す．図 4.12 では，各成分の値域を［0.0 1.0］と正規化しているため，立方体の形をしている．
なお，R，G，B の定義が異なれば別の色空間と考えなければならない．RGB 三原色の選択やガンマ補正の有無などの詳細については，ほかの文献に譲る．
B
Blue （0, 0, 1）
Magenta

Cyan

White
（0, 1, 0）GGreen（1, 0, 0）
RedR

図 4.1276

第4章

Yellow
Gray scale

RGB 空間画像処理の基礎

● YCbCr 空間
YCbCr 空間は，輝度成分 Y と二つの色差成分 Cb，Cr で色を表現する．輝度成分 Y はモノクロ映像
を与え，二つの色差信号 Cb，Cr はカラー化に足りない色度情報を補う．
（1）変換式JPEG で広く利用されている色空間の変換と逆変換の例を以下に示そう．

⎛ xY ⎞ ⎛ 0.299 0.587 −0.114 ⎞ ⎛ x R ⎞ ⎛ 0 ⎞⎜ xCb ⎟ = ⎜ −0.169 −0.331 0. 5 ⎟ ⎜ x G ⎟ + ⎜ 128 ⎟ …………………………………………………（4.7）⎟ ⎜ ⎟ ⎜⎟⎜
⎟ ⎜⎝ xCr ⎠ ⎝ 0. 5 −0.419 − 0. 081⎠ ⎝ x B ⎠ ⎝ 128 ⎠xY
01.402 ⎞ ⎛⎛ xR ⎞ ⎛ 1⎞⎜ xG ⎟ = ⎜ 1 −0.344 −0.714 ⎟ ⎜ xCb − 128 ⎟ ……………………………………………………………（4.8）
⎟ ⎜
⎜ ⎟ ⎜
⎟
⎝ xB ⎠ ⎝ 1 1.772 0⎠ ⎝ xCr − 128 ⎠ここで xR，xG，xB は，それぞれガンマ補正がなされた値域［0 255］の R，G，B 成分の値である．
映像（動画像）の場合は，ITU-R BT.601 勧告で与えられている⎛ xY ⎞ ⎛ 0.257 0.504 0.098 ⎞ ⎛ x R ⎞ ⎛ 16 ⎞⎜ x ⎟ = ⎜ −0.148 −0.291 0.439 ⎟ ⎜ x ⎟ + ⎜128 ⎟ …………………………………………………（4.9）⎟ ⎜ G⎟ ⎜⎟⎜ Cb ⎟ ⎜⎝ xCr ⎠ ⎝ 0.439 −0.368 − 0.071 ⎠ ⎝ x B ⎠ ⎝128 ⎠という変換が広く利用されている．ここで xR，xG，xB は，先ほどと同じように，それぞれガンマ補正がなされた値域［0 255］の R，G，B 成分の値であり， xY，xCb，xCr は，それぞれ［16 235］，［16240］，［16 240］という範囲で与えられる．Image Processing Toolbox で提供される rgb2ycbcr 関数
は，式（4.9）を実装している．
なお，線形 RGB 空間に対してガンマ補正を加えた空間を R G B 空間と表現し，R G B 空間から式（4.9）
によって与えられる空間を Y Cb Cr（もしくは，Y CbCr）
空間と表現することがある．Y
成分は Luma，Cb ，Cr 成分は Chroma と呼ばれ，線形 RGB 空間から与えられる輝度成分
Luminance や色差成分 Chrominance と区別される．本書では R G B 空間，Y Cb Cr 空間を簡
単に RGB 空間，YCbCr 空間と表記している．
実習 4.7

YCbCr 空間

M-file ： practice04̲7.m
ファイル firenzeRgb.jpg を読み込み，式（4.7）の定義に従って YCbCr 空間へ変換し，各成分を画像として表示してみよう．uint8 型は負の値を扱えないので，double 型に変換して計算し
よう．
（2）色差サブサンプリング
色差成分 Cb，Cr の変化に対する人間の視覚特性が輝度成分 Y よりも鈍感であることから，色差成分の解像度を落とすことでデータ量の圧縮を実現できる．この考え方は，画像や映像の伝送・蓄積を行う際に，伝送路や蓄積媒体の効率的利用のために用いられる．
4.5

色空間

77

Y

Y

Y

Y

Cb
Cb

Cb

Cr

Cb

Cr
Cr

（b）4：2：2（b）4：1：1（b）4：2：0

Cr（a）4：4：4

図 4.13 色差サブサンプリング

水平

輝度画素

色差画素

垂
直
（a）4：2：2（b）4：1：1（c）4：2：0（MPEG-2など）（d）4：2：0（MPEG-1など）

図 4.14 色差成分の標本位置

CIF（4：2：0）352

YCbCr4：2：0ストリーム構造
frame1frame2frame3

…

Cr1

…

Y（輝度）
288
144

Cr
Cb
（色差） （色差）

Y1

Cb1

Y1（1,1）Y1（1,2）Y1（1,3）…

176

図 4.15

CIF 映像のビット・ストリーム構造の例

色差信号に対する解像度の低い標本化を色差サブサンプリングと呼ぶ．色差サブサンプリングの概略を図 4.13 に示そう．4 ： 4 ： 4 は色差サブサンプリングを行わない形式を表している．水平の解
像度を半分に減らした形式を 4 ： 2 ： 2，1/4 に減らした形式を 4 ： 1 ： 1 と呼ぶ．水平，垂直それぞれの解像度を半分に減らした形式を 4 ： 2 ： 0 と呼ぶ．4 ： 4 ： 4 に比べて，4 ： 2 ： 2 は 2/3，4 ： 1 ：
1 と 4 ： 2 ： 0 は 1/2 のデータ量で画像や映像を表現している．
色差成分の標本位置を図 4.14 に示そう．MPEG-1 と MPEG-2 では異なるなど，フォーマットごとに標本位置に違いがあるので注意が必要である．CIF 形式の映像は，MPEG-1 と同じ標本位置の 4 ：78

第4章

画像処理の基礎2 ： 0 となっている．4 ： 4 ： 4 と 4 ： 2 ： 2，4 ： 1 ： 1，あるいは 4 ： 2 ： 0 の間の変換については，拡大・縮小処理について解説している第 6 章を参照されたい．
以下に，CIF の生データから AVI ファイルを作成する MATLAB のコマンド例を掲載しよう．
例題 4.9

CIF → AVI 変換

図 4.15 に示されるようなビット・ストリーム構造をもつ CIF 映像（ファイル名 mobile.cif）を
AVI 形式（ファイル名 mobile.avi）に変換してみよう．ただし，• 水平走査されている（列優先ではない）• フレームレートは 30［fps］• フレーム数は 300とする．
解以下に，MATLAB による処理例を示す．
frameSizeY = [288 352];
frameSizeC = [144 176];
frameRate = 30;
nFrames = 300;
nPixelsY = prod(frameSizeY);
nPixelsC = prod(frameSizeC);
precision = 'uint8=>uint8';
fileId = fopen('mobile.cif','r');% avifile オブジェクトのクリア
clear mex;
% avifile オブジェクトの生成
aviObj = avifile('mobile.avi',...
'FPS', frameRate);
for iFrame = 1:nFrames% 輝度(Y) 成分を列ベクトルとして読み込み
pictureTpd= ...
fread(fileId, nPixelsY, precision);% 転置に注意して配列化
pictureYCbCr(:,:,1) = ...
reshape(pictureTpd,...
frameSizeY(2), frameSizeY(1)).';
for iCmp = 2:3% 色差(Cb,Cr) 成分を列ベクトルとして読み込み
4.5

色空間

79

色あい（H）
青っぽい

f

赤っぽい

f

鮮やかさ（S）
鮮やか

図 4.16
スペクトラム分布と色の心理的特徴の関係

明るさ（I）
明るい

f

f

鈍い，淡い

暗い

f

f

pictureTpd = ...
fread(fileId, nPixelsC, precision);% 転置に注意して配列化
pictureC = reshape(pictureTpd, ...
frameSizeC(2), frameSizeC(1)).';% 縦横それぞれ 2 倍に拡大(Image Proc. TB)
pictureYCbCr(:,:,iCmp) = ...
imresize(pictureC,2);
end% YCbCr を RGB へ変換(Image Proc. TB)
pictureRgb = ycbcr2rgb(pictureYCbCr);% フレームの追加
aviObj = ...
addframe(aviObj, im2frame(pictureRgb));
end
fclose(fileId);% avifile オブジェクトのクローズ
aviObj = close(aviObj);
ycbcr2rgb 関数と imresize 関数は Image Processing Toolbox で提供される関数で，それぞれ画
像の色空間変換，拡大・縮小を行う．Image Processing Toolbox を持っていない読者のために，
ycbcr2rgbcq と imresizecq という簡易版の関数を用意した．また，ファイル mobile.cif は以下のサイトから入手できるので，試していただきたい．
http://trace.eas.asu.edu/yuv/● HSI 空間
RGB 空間は，撮像機器や表示機器に適した色空間である．また，YCbCr は伝送や蓄積に適してい80

第4章

画像処理の基礎

White

Green
Green

Yellow

Yellow

S
Cyan

Blue

Green

White

H

Yellow

1W

Cyan

Magenta

Cyan

V

Blue

Magenta

Red

Red

0
Black
Blue

Red

Magenta

図 4.18HS

6 角錐モデルBlack（a）対角線を垂直に立てた図

図 4.17（b）（a）
を上部から見た図

RGB 空間と HSI 空間の関係

る．しかし，これらの空間は心理的な色の特徴量を必ずしも表現していないため，色そのものの操作には適していない．ここで紹介する HSI 空間は，色操作に適した色空間の一種である．
（1）色の心理的特徴量
人間は色あい（Hue），鮮やかさ（Saturation），明るさ（Intensity）から色を特徴付けるといわれている．これらの頭文字を列挙したものが HSI である．スペクトラム分布とそれぞれの特徴量の関係を図4.16 に示そう．色あいは，占有するスペクトラムの周波数に関連する．鮮やかさはスペクトラムに含まれる白色の量，明るさはスペクトラムの囲む面積（エネルギ）に対応する．
（2）RGB 空間との関係
RGB 空間との直感的な関係を示すために，図 4.17（a）に RGB 空間の黒白対角軸を垂直に立ち上げた図を示そう．黒白間の対角軸は，明るさ I に対応する．また，図 4.17（ a）を上部から見た図を図4.17（b）に示す．色あい H が角度に，鮮やかさ S が中心からの距離に対応することがわかる．すなわ
ち，H，S，I の値をもって色を表現できる．
（3）HSV 空間
HSI 空間の具体的な定義にはさまざまなものが存在する．ここでは A. R. Smith による HSV（H，S，Value）空間の定義を紹介しよう．この HSV 空間は図 4.18 に示すような 6 角錐の形をしている．なお，
MATLAB では RGB 空間と HSV 空間の間の変換に rgb2hsv 関数と hsv2rgb 関数を利用することができる．
RGB 空間から HSV 空間への変換は，xR，xG，xB の値域が［0.0 1.0］として，

 1  xG − xB 
 6  xmax − xmin  , 1
x − xR ,
xH =   2 + Bx
6max − xmin  1  4 + xR − xG  , 6 
xmax − xmin 
xmax − xmin
xmax
xV = xmax

if xmax = xR
if xmax = xG
if xmax = xB

xS =…………………………………………………………
（4.10）
4.5

色空間

81

と与えられる．ただし，xmax = max (xR, xG, xB)，xmin = min (xR, xG, xB)である．xmax = xmin
（xS = 0）のとき
xH は定義されない．また，xmax = 0（xV = 0）のとき xS は定義されない．
例題 4.10

HSV 空間ファイル firenzeRgb.jpg を読み込み，HSV 空間に変換して，それぞれの成分を表示してみよう．
解
以下に，MATLAB による処理例を示す．
pictureRgb = imread('./data/firenzeRgb.jpg');% RGB->HSV 変換
pictureHsv = rgb2hsv(pictureRgb);
figure(1); % 原画の表示
imshow(picuterRgb);
figure(2); % H 成分の表示
imshow(picuterHsv(:,:,1));
figure(3); % S 成分の表示
imshow(picuterHsv(:,:,2));
figure(4); % V 成分の表示
imshow(picuterHsv(:,:,3));
Image Processing Toolbox がない場合は imshow 関数が使えないので，代わりに用意した簡易版の imshowcq 関数を利用していただきたい．
カラー画像の明るさと鮮やかさを調整することを想像してみよう．RGB 空間では，明るさの調整は良いとして，鮮やかさの調整は直感的に思いつかないだろう．一方，HSV 空間では，V 成分と S 成分を操作すればよいことが分かる．
実習 4.8

HSV 空間での処理

M-file ： practice04̲8.m
ファイル firenzeRgb.jpg を読み込み，RGB 各成分に対して累乗則変換を行ってみよう．また，HSV 空間へ変換し，V 成分のみに累乗則変換を施し，再度 RGB 空間に戻した画像との比較を行っ
てみよう．
● その他
（1）ロスレス変換
静止画像国際標準方式 JPEG2000 では，ひずみを許す非可逆圧縮（ロッシ）モードとひずみを許さな
い可逆圧縮（ロスレス）モードが規程されている．ロッシ・モードでは先に紹介した YCbCr 空間が用82

第4章

画像処理の基礎

いられるが，有限語調実現ではビット精度で元の RGB 空間表現を復元できない．そこで，ロスレ
ス・モード用に可逆のコンポーネント変換（RCT ： Reversible Component Transform）が定義されている（章末問題 4.9 を参照）．
（2）CIE 色空間
Image Processing Toolbox では，CIE（国際照明委員会）が定める色空間を扱うために，色空間変換を作成する makecform 関数と色空間変換を適用する applycform 関数が用意されている．

章末問題
問題 4.1

総ビット数

高さ N0 = 256，幅 N1 = 256 で，R，G，B 各成分の 1 画素あたりのビット数がそれぞれ bR = 8［bpp］，
bG = 8［bpp］，bB = 8［bpp］のカラー画像データの総ビット数 S［bits］を求めてみよう．
問題 4.2

ビット・レート

高さ N0 = 720，幅 N1 = 1280，フレーム間隔 T = 1/30［sec］，YCbCr4:2:0 の HDTV
（High Definition
Television）のビット・レート［bps］を求めてみよう．ただし，Y，Cb，Cr 各成分の 1 画素当たりのビット数を 8［bpp］とする（ちなみに，圧縮を前提とした地上デジタル放送の 1 チャネル当たりのビット・レートは 14［Mbps］程度である）．
問題 4.3

RAW 画像の読み込み（MATLAB 演習）

高さ N 0 = 612，幅 N 1 = 816 のカラー画像の R，G，B 成分をそれぞれバイト列として保存した
firenze.rrr，firenze.ggg，firenze.bbb というファイルを用意した．これらを読み込んで，RGB カラー画像として表示しよう．なおそれぞれのファイルは，列ベクトルを優先して走査している．
問題 4.4MPEG-1/2 の入力（MATLAB 演習）

MPEG-2 デコーダのライブラリ libmpeg2 が以下のサイトから入手できる．
http://libmpeg2.sourceforge.net/
同サイトより，このライブラリを使った mpeg2dec というツールも入手できる．このツールはMPEG-1/2 の画像をデコードし，各フレーム画像の YCbCr 成分を 1 枚の PGM 画像（モノクロ画像）にまとめて出力する機能がある．この PGM 画像列から AVI 形式の映像を作成してみよう．
問題 4.5

フレーム画像列の出力（MATLAB 演習）

映像ファイル calcio.avi を frame2im 関数と imwrite 関数を使って JPEG 形式のフレーム画像列に変換してみよう．

章末問題

83

問題 4.6

ガンマ補正

ガンマ値 γ c = 1.0 の CCD カメラで撮影した画像（輝度値［0.0 1.0］）を，ガンマ値 γ d = 2.0 のモニタで表示したい．ガンマ補正の式を与え，このグラフを描いてみよう（立ち上がりの線形近似は無視する）．
ヒストグラム均等化（MATLAB 演習）

問題 4.7

適当なモノクロ画像に対して，γ ＜ 1 と γ ＞ 1 の累乗則変換を施し，明るくした画像と暗くした画像を用意しよう．さらに，それぞれに対してヒストグラム均等化を施し，その結果を比較してみよう．
HSV 空間における処理（MATLAB 演習）

問題 4.8ファイル firenzeRgb.jpg を読み込み，S 成分のみに累乗則変換を施した画像を表示してみよう．
累乗則変換のパラメータ γ をいろいろと変えて画像の変化を見てみよう．
色空間変換（MATLAB 演習）

問題 4.9JPEG2000 のロスレス・モードで利用される RCT と逆 RCT を施して，RGB 空間における画像表現が完全に復元されることを確かめてみよう．なお，RCT は，

x + 2xG + xB ⎥xY = ⎢ R
4⎣⎢⎦⎥0

xY = xB − xG
1xY = xR − xG2と与えられ，逆 RCT は，

x + xY ⎥xG = x Y − ⎢ Y⎣⎢ 4 ⎦⎥
12

0

xR = xY − xG
2xB = xY − xG
1と与えられる．ただし，⎣・⎦ は小数点以下切り捨て（整数化）を意味する
参考文献（1）サイバネットの MATLAB ホームページ，http://www.cybernet.co.jp/matlab/（2）Rafael C. Gonzalez and Richard E. Woods ； Digital Image Processing, 2nd Ed.，Prentice Hall，2001．
（3）Yao Wan, J örn Ostermann Ya-Qin Zhang ； Video Processing and Communications，Prentice Hall，
2001．
（4）小野定康，鈴木純司；わかりやすい JPEG2000 の技術，オーム社，2003 年．
（5）David S. Taubman and Michael W. Marcellin ； JPEG2000, Image Compression Fandamentals, Standards andPractice，Kluwer Academic Publishers，2002．

84

第4章

画像処理の基礎第5章

画像の近傍処理

前章では，画素処理や色空間変換などの基本的な画像・映像の操作を MATLAB の処理例と共に解説した．本章では，画素処理や色空間変換と並んで画像・映像処理の基本となる近傍処理について，
MATLAB による処理例を交えながら解説しよう．

5.1

近傍処理の一般的操作

画素処理と同じように，近傍処理は空間領域（映像では時空間領域）の処理であり，画像・映像のノイズ除去やエッジ抽出など，画質の調整や強調に用いられる．単純な処理だが，符号化やパターン認識の前処理・特徴量抽出，人工的効果など，その応用範囲は幅広い．
図 5.1 に 3 × 3 のマスクを用いた画像 x [n0, n1]に対する近傍処理の様子を示そう．近傍処理では，各画素とその近傍画素を用いて出力画像 y [n0, n1]の画素値を計算する．この変換を T とすると，出力画像と入力画像は，

y [n0, n1] = T {x [n0, n1]} …………………………………………………………………………………（5.1）のように関係付けられる．
いま，図 5.1 に示すように，ある位置[n 0c, n 1c]に着目しよう．式（5.1）は，出力画像の画素 y[n 0c, n 1c]
原点

n 1c

n1
[ n 0c ，n 1c ]n 0c

画像 x [ n 0 ，n 1 ]

n0

図 5.1

近傍処理（3 × 3 マスクの例）

5.1

近傍処理の一般的操作

85

が，x [n 0 c, n 1 c]とその近傍の画素値の処理から求められることを意味する．この処理をすべての画素
に対して行い，出力画像を得る．
画素処理が，着目する画素の値 x のみで出力値 y を決定したのに対して，近傍処理は，出力値y [n 0 c, n 1 c]を着目する画素 x [n 0 c, n 1 c]とその周辺の画素値で決定する．マスクの大きさとして，3 × 3以外を選択することも可能である．1 × 1 のマスクを選択する場合は，画素処理そのものに相当する．
また，時間軸や色空間も考慮したより高次元のマスクも存在する．

5.2

近傍処理の具体例

本節では近傍処理の具体例として，以下に示す平滑化処理と先鋭化処理について解説しよう．

• 平滑化処理- 加重移動平均フィルタ（線形）- ガウス平滑化フィルタ（線形）- 順序統計フィルタ（非線形）• 先鋭化処理- ラプラシアン・フィルタ（線形）- 高域強調フィルタ（線形）- ガウスのラプラシアン
（LoG）
フィルタ
（線形）
こうばい

- 勾配フィルタ
（非線形）● 平滑化処理
平滑化処理は，大きなオブジェクトの抽出の前処理や，直線や曲線上の小さな溝を埋める補間，ノイズ除去などに利用される．代表例として，加重移動平均フィルタ（線形）や順序統計フィルタ（非線形）が挙げられる．これらについて解説しよう．
（1）加重移動平均フィルタ（線形）
加重移動平均フィルタは，最も基本的な近傍処理といえる．その変換は，

y [n 0, n1] = T {x [n 0, n 1]}
KB

= ∑

KR

∑ w [k0, k 1] x [n0 +k 0, n1 +k 1] ………………………………………………………（5.2）

k 0 = KT k 1= KLのように加重移動平均操作として表現される．ここで，w[k 0, k 1]は，各画素にかかる重み係数であり，KT，KB，KL，KR は，それぞれ近傍処理の上，下，左，右の範囲を示している．係数配列 w [k 0, k 1]
そのものを本書ではマスク係数と呼ぶことにする．図 5.2 に 3 × 3 マスクの例（KT = − 1，KB = 1，KL

= −1，KR = 1）を二つ示す．また，図 5.3 に移動平均フィルタを用いた近傍処理の例を示す．なお，配列の境界部では，外側にゼロ値を仮定している．
例題 5.1

くけい

移動平均（矩形）フィルタ

図 5.4（a）に示すノイズの加わった画像に対し，図 5.2（a）に示すマスクを用いた平滑化処理を施
86

第5章

画像の近傍処理

1
×
9

1

1

1

1

1

1

1

1

1

1
×
16

（a）移動平均
（矩形）
フィルタ

1

2

1

2

4

2

1

2

1

（b）加重移動平均フィルタ

図 5.2 マスクの例

18

9

9

9

27

9

9

9

36

9

9

9

3×3移動平均（矩形）
フィルタの処理例(18＋9＋9＋27＋9＋9＋36＋9＋9)/9＝135/9
＝15

7

9

6

4

12

15

9

6

9

11

6

4

図 5.3 近傍処理の例（a）ノイズの加わった画像

図 5.4（b）移動平均フィルタで処理した画像

画像平滑化の例

してみよう（Image Processing Toolbox では， imnoise 関数に，ノイズ・タイプとして solt &pepper を指定することで，このごま塩ノイズを重畳できる）．
解
以下に，MATLAB による処理例を示す．pictureNoisy は図 5.4（a）のワークスペース上の参照とし，uint8 型であるとする．
% マスクの設定
movAveMask = [1 1 1;
1 1 1;
1 1 1 ] / 9;
% 移動平均フィルタ処理
5.2

近傍処理の具体例

87

pictureFiltered = ...
uint8(filter2(movAveMask,pictureNoisy));
近傍処理に filter2 関数を利用した．図 5.4（b）に処理結果を示す．
きゅうしゅん図 5.4（b）を見ると，平均化の効果により輝度の急峻 な変化が抑えられ，ノイズが低減されていることがわかる．なお，Image Procssing Toolbox では， fspecial 関数にフィルタ・タイプとして引き数 average を与えることで，移動平均フィルタのマスクを生成できる．さらに，imfilter 関数を利用して以下のように近傍処理を実行できる．
% マスクの設定
movAveMask = fspecial('average',[3 3]);% フィルタ処理
pictureFiltered = ...
imfilter(pictureNoisy,movAveMask);（2）ガウス平滑化フィルタ
（線形）
図 5.2
（a）
に示す移動平均フィルタは，中心画素と近傍画素の重みが同じである．そこで，図 5.2（b）のマスクのように中心に重みを置いたフィルタがしばしば利用される．また，標準偏差 σ をパラメータとして重み付けを制御できるガウス平滑化フィルタもよく利用される．ガウス平滑化フィルタのマスク係数 w [k 0, k 1]は，

w[k 0, k 1] =KB

gσ (k0, k 1)KR

∑ ∑ gσ (k0, k 1)………………………………………………………………………（5.3）

k 0 = KT k 1= KLと与えられる．ただし，

gσ ( p 0, p 1) =

p +p
1
e− 2σ
2πσ 2
2
0

2
1

2

Image Processing Toolbox では， fspecial 関数にフィルタ・タイプとして引き数 gaussian を与えることで，ガウス平滑化フィルタのマスクを生成できる．
実習 5.1

加重移動平均フィルタ

M-file ： practice05̲1.m
図 5.4（a）に示すノイズの加わった画像に対して，図 5.2（b）に示すマスクを用いた平滑化処理を施して見よう．また，より大きなサイズのマスクを用いた移動平均フィルタについても試してみ
よう．

88

第5章

画像の近傍処理

10

20

20

20

15

20

20

25 100

ソート

小さい

大きい

{10,15,20,20,20,20,20,25,100}

最大値フィルタ
max{10,15,20,20,20,20,20,25,100}＝100
最小値フィルタmin{10,15,20,20,20,20,20,25,100}＝10
中央値フィルタ
median{10,15,20,20,20,20,20,25,100}＝20

図 5.5

順序統計フィルタによる近傍処理（3）順序統計フィルタ（非線形）
先に述べた移動平均フィルタ，加重移動平均フィルタは，ノイズを低減すると同時にノイズ以外の輪郭部分もぼかしてしまう．原画像の輪郭をぼかさずにノイズだけを低減する有効な方法として，
メディアン（中央値）フィルタがよく知られている．これは順序統計フィルタというクラスに分類される．
順序統計フィルタでは，まず，マスク内の画素をその大きさに応じてソートする．図 5.5 に 3 × 3
マスクの処理例を示す．次に，最大値，最小値，あるいは中央値など，ソート後の画素の位置によって出力画素を決定する．例えば，インパルス状の大きな値や小さな値の画素は，マスク内において中央値とはなり難く，中央値を出力するメディアン・フィルタで効果的に除去できる．
例題 5.2

メディアン・フィルタ

図 5.4（a）に示すノイズの加わった画像に対して，3 × 3 のメディアン・フィルタ処理を施してみよう．
解以下に，MATLAB による処理例を示す．pictureNoisy は図 5.4（a）のワークスペース上の参照とし，uint8 型であるとする．

[nRows nCols] = size(pictureNoisy);% 境界部にゼロ値を外挿
pictureNoisy = ...
[zeros(nRows,1) ...
pictureNoisy zeros(nRows,1)];
pictureNoisy = ...
[zeros(1,nCols+2) ; ...
pictureNoisy ; ...
zeros(1,nCols+2)];% フィルタ処理
5.2

近傍処理の具体例

89

図 5.6

メディアン・フィルタで処理した画像

for iCol = 1:nCols
for iRow = 1:nRows% 3x3 領域の切り出し% (水平垂直の 1画素のずれに注意）
subDomain = ...
pictureNoisy(iRow:iRow+2, ...
iCol:iCol+2);% 中央値の出力
pictureMedian(iRow,iCol) = ...
median(subDomain(:));
end
end
この例では，中央値の抽出に median 関数を利用した．図 5.6 に処理結果を示す．
図 5.6 より，メディアン・フィルタは，移動平均フィルタに比べてインパルス状のノイズをより低減することが分かる．Image Processing Toolbox では，メディアン・フィルタを適用する関数として medfilt2 関数が用意されている．さらに，より一般的な順序統計フィルタを適用する関数として
ordfilt2 関数が用意されている．
実習 5.2

順序統計フィルタ

M-file ： practice05̲2.m
最大値フィルタ，最小値フィルタも試してみよう．

90

第5章

画像の近傍処理

1

18

9

9

9

1 −4 1

1 −8 1

27

9

9

9

0

1

36

9

9

9

0

1

1

0

1

0

（a）4近傍111（b）8近傍図 5.7 マスクの例

4近傍ラプラシアン・フィルタの処理例

0＋9＋0＋27−4・9＋9＋0＋9＋0
＝18

−36

0

−9

−45

18

0

−18
−9

−108

18

−9

−18

図 5.8 先鋭化処理の例● 先鋭化処理
平滑化フィルタと同じくらいよく利用されるフィルタとして，先鋭化フィルタがある．先鋭化
フィルタは，画像の詳細部の抽出や強調のために利用される．印刷，医療用画像，産業製品検査，
軍事システムなど，応用も幅広い．デジタル・カメラで撮影した画像のぼけの補正にも利用できる．以下では，この代表例として，ラプラシアン・フィルタと勾配フィルタを紹介しよう．
（1）ラプラシアン・フィルタ（線形）ラプラシアン・フィルタは，2 次元の 2 次微分操作∇2 x ( p 0, p 1) =∂2 x ∂2 x+∂p 20 ∂p 12を意味しており，2 次差分演算∂2 x ~− x[n + 1] − 2x[n] + x[n − 1]∂n2による近似を利用している．微分とはいっても変数が離散であるため，数学的な意味は持たない．
ただし，以下の点で 2 次微分に類似している．

• 一定区間で出力がゼロ• ステップ/ランプの始点・終点で出力が非ゼロ• ランプに沿って出力がゼロ

ラプラシアン・フィルタは，式（5.2）で示した加重移動平均（差分）操作によって実現できる．図 5.7にラプラシアン・フィルタのマスクの例を示そう．図 5.7（a）は，1 次元の 2 次微分を水平垂直に適用
した 4 近傍ラプラシアン・フィルタのマスクである．図 5.7（b）は，さらに対角方向も考慮した 8 近傍
ラプラシアン・フィルタのマスクである．図 5.8 に 4 近傍ラプラシアン・フィルタの処理例を示す．
例題 5.34 近傍ラプラシアン・フィルタ

図 5.9（a）に示す画像に対して，図 5.7（a）に示すマスクを用いた先鋭化処理を施してみよう．
解
以下に，MATLAB による処理例を示す．pictureGray は図 5.9（a）のワークスペース上の参照とし，uint8 型であるとする．
% マスクの設定
5.2

近傍処理の具体例

91

（a）原画像

図 5.9（b）処理画像4 近傍ラプラシアン・フィルタによる画像先鋭化の例

laplacianMask = [01 0;

1 -4 1;0

1 0 ];% ラプラシアン・フィルタ処理
pictureFiltered = uint8(...
filter2(laplacianMask,pictureGray));
マスク係数が異なる以外，加重移動平均フィルタと処理は変わらない．図 5.9（b）に処理結果を示す．なお，出力は負値も含むため，ゼロ値を 128 にシフトして［0 255］の輝度値範囲で表示して
いる．
図 5.9
（b）
より，輝度の変化部が抽出されていることがわかる．なお，Image Processing Toolbox がある場合は，fspecial 関数にフィルタ・タイプとして laplacian を，パラメータ α として 0.0 を与えることで，4 近傍ラプラシアン・フィルタを設計できる．パラメータ α を 0.5 と与えることで 8 近傍
ラプラシアン・フィルタも設計できるが，本書で示したフィルタとは利得が異なるので注意されたい．
実習 5.38 近傍ラプラシアン・フィルタ

M-file ： practice05̲3.m
8 近傍ラプラシアン・フィルタも試してみよう．
（2）高域強調フィルタ（線形）
先のラプラシアン・フィルタは，画像の輝度変化を抽出した．この結果を原画像に加える（実際は引く）ことで，輪郭を強調するフィルタとなる．このようなフィルタは高域強調フィルタ（Highboost filter ）と呼ばれる．図 5.10 に 4 近傍および 8 近傍の高域強調フィルタのマスクを示す．なお，
92

第5章

画像の近傍処理

0

−1

0

−1

−1

−1

−1 A＋4 −1−1 A＋8 −1

0

−1

−1

0

（a）4近傍図 5.10−1−1（b）8近傍マスクの例

ラプラシアン演算を∇2 とすると，入出力関係は，

y[n0, n1] = Ax[n0, n1] − ∇2 x[n0, n1]と表現される．ただし，A ≧ 1 である．この演算は原画像から平滑化画像を差し引くアンシャープ（unsharp）
演算に対応することから，アンシャープ・マスキングとも呼ばれる．
例題 5.44 近傍高域強調フィルタ

図 5.9（a）に示す画像に対して，図 5.10（a）に示すマスクを用いた高域強調処理を施してみよう．
ただし，A = 1 とする．
解以下に，MATLAB による処理例を示す．pictureGray は図 5.9（a）のワークスペース上の参照とし，uint8 型であるとする．
% マスクの設定
unsharpMask = [ 0 -1 0;-1 5 -1;
0 -1 0 ];% 高域強調フィルタ処理
pictureFiltered = uint8(...
filter2(unsharpMask,pictureGray));
図 5.11 に処理結果を示す．
図 5.11 より，フィルタ処理か輪郭部分を強調していることが分かる．なお，Image Processing
Toolbox では，fspecial 関数にフィルタ・タイプとして unsharp を，パラメータ α として 0.0 を指定することで，本稿で示す 4 近傍高域強調フィルタを設計できる．パラメータ α を 0.5 と与えることで 8
近傍高域強調フィルタを設計できるが，本書で示したフィルタとは利得が異なるので注意されたい．
実習 5.48 近傍高域強調フィルタ

M-file ： practice05̲4.m
5.2

近傍処理の具体例

93図 5.114 近傍高域強調フィルタによる画像先鋭化の処理例

8 近傍高域強調フィルタも試してみよう．
（3）ガウスのラプラシアン
（LoG）
フィルタ
（線形）
ラプラシアン・フィルタは，画像の輪郭を抽出するために利用できるが，同時に細かいノイズも強調してしまう．そこで，ガウス平滑化フィルタとラプラシアン・フィルタを同時にかけるガウスのラプラシアン（LoG）
フィルタもポピュラなフィルタの一つとして利用される．

∇2 gσ ( p 0, p 1) = −p 20+ p 12 ⎞ − p + p
1 ⎛
2σ
⎜1 −
⎟ e
πσ 4 ⎝
2σ 2 ⎠
202
1

2

より，LoG フィルタのマスクは，

w[k 0, k 1] =2
0

k 20 + k 12 − 2σ 2 − k2σ+k
e
2πσ 6

2
1

2

と与えられる．Image Processing Toolbox の fspecial 関数では，ファイル・タイプに log を指定することで，LoG フィルタを設計できる．上式とスケーリングが異なるので，詳細はマニュアルを参照
してほしい．
（4）勾配フィルタ（非線形）勾配フィルタは，式（5.2）で示した加重移動平均（差分）操作と絶対値和を組み合わせて実現される
非線形フィルタである．以下に手続きをまとめる．
1．勾配を求める．

⎛ ∂x ⎞⎛ G0 ⎞ ⎜ ∂p ⎟∇x = ⎜ ⎟ = ⎜ 0 ⎟⎝ G1 ⎠ ⎜ ∂x ⎟⎝ ∂p1 ⎠
2．勾配の大きさを求め出力とする．

∇x = G02 + G12 ~ G0 + G1
94

第5章

画像の近傍処理

−1 0

1

1

1

1

−1

−1 0
1

0 −1 −1

0

0

0

0

1

0 −1

0

−1 −1 −1

1

1

0 −1

1

垂直方向

∂
∂n 0

図 5.12Prewitt マスクの例

水平方向

水平方向

∂
∂n 1

∂
∂n 1

18

9

9

9

27

9

9

9

36

9

9

9

垂直方向

∂

(18＋9＋9)−(36＋9＋9)
＝−18

∂n 0

1

(18＋27＋36)−(9＋9＋9)
＝54

0

0

36

27

18

図 5.13

45

27

0

18

−27

54

0

27

−18

45

0

18

27

36

54

−36 −45 −27 −18−18 −18

−18

−18

54

72

45

72

0

27

54

90

27

36

Prewitt マスクによる処理例

なお，離散の変数に対応させるため 1 次微分演算は差分に置き換えられることに注意する．また，勾配の大きさを求める際に絶対値和を取るため，非線形な処理となる．結果が非負の値をとるため，
2 値化処理と組み合わせてエッジ検出に利用されることが多い．
図 5.12 に 1 次微分フィルタのマスク（Prewitt マスク）の例を示し，図 5.13 にその処理の具体例を示す．
例題 5.5Prewitt フィルタ

図 5.9（a）に示す画像に対して，図 5.12 に示すマスクを用いた Prewitt フィルタ処理を施してみよう．
解以下に，MATLAB による処理例を示す．pictureGray は図 5.9（a）のワークスペース上の参照とし，uint8 型であるとする．
% マスクの設定
prewittMask = [ 1

1

1;

0

0

0;

-1 -1 -1 ];% フィルタ処理と結果の表示
pictureVerFiltered = ...
filter2(prewittMask, pictureGray);5.2

近傍処理の具体例

95

図 5.14Prewitt マスクによる輪郭抽出例

−1 0

1

1

2

1

−1

1

0 −1 −1

0

0

0

0

2

0 −2

0

−1 0

0 −1

−1 −2 −1

1

1

0 −1

1

0

1

垂直方向

−1 0

水平方向

n0

1

n1

（a）Sobel

図 5.15

1

右下方向

0

左下方向

（b）Robarts（Forsen）

マスクの例

pictureHorFiltered = ...
filter2(prewittMask.', pictureGray);pictureFiltered = uint8(...
abs(pictureVerFiltered) ...
+ abs(pictureHorFiltered) );図 5.14 に処理結果を示す．輪郭が輝度の変化部として抽出されていることが分かる．
Image Processing Toolbox では， fspecial 関数に，フィルタ・タイプとして prewitt を指定することで垂直方向の Prewitt フィルタのマスクを生成できる．
実習 5.5

Sobel/Robarts フィルタ

M-file ： practice05̲5.m
勾配を計算する際に，図 5.15 に示すようなマスクも広く利用されている．図 5.15（a）のマスクを用いた勾配フィルタを Sobel フィルタと呼び，図 5.15（b）のマスクを用いた勾配フィルタを
Robarts あるいは Forsen フィルタと呼ぶ．Sobel フィルタおよび Robarts フィルタを用いた輪郭抽出も試してみよう．なお，Image Processing Toolbox では，fspecial 関数に，フィルタ・タイプ
96

第5章

画像の近傍処理として sobel を指定することで垂直方向の Sobel フィルタ・マスクを生成できる．また，egde 関数によって Sobel，Prewitt，Robarts フィルタを用いたエッジ検出が行える．

5.3

線形シフト不変システム

画像に対する近傍処理は，2 次元の信号処理システムとして解釈できる．その最も基本的なクラス
として線形シフト不変（LSI ： Linear Shift-invariant）システムがある．加重移動平均（差分）操作によって実現される加重移動平均フィルタ，ラプラシアン・フィルタ，高域強調フィルタはその典型例といえる．以下，線形シフト不変システムについて解説しよう．
● インパルス応答
1 次元の線形時不変システムと同じように，2 次元の線形シフト不変システムも，そのインパルス応答によってシステムの性質が表現される．なお，2 次元の単位インパルス信号 δ [ n 0, n 1]は，1 次元の単位インパルス信号 δ [ nd ] によりδ [n 0, n 1] = δ [n 0]δ [n 1] =10n 0 = n1 = 0
その他と定義される．
また，2 次元システム T {・}のインパルス応答は，

h[n 0, n1] = T {δ [ n 0, n1]} …………………………………………………………………………………（5.5）と定義される（図 5.16）．
● 畳み込み演算システムが線形かつシフト不変である場合，その性質は式（5.5）で定義されるインパルス応答 h [ n 0,

n 1 ]によって決定され，出力 y [ n 0, n 1]は h [ n 0, n 1]と入力 x [n 0, n 1]の演算によって求められる．このことを示そう．
まず，入力 x [n 0, n 1]を δ [n 0, n 1]の重み付け和として∞∞

x[n 0, n1] = ∑∑ x[k0, k 1] δ [n0 −k 0, n1 −k 1] ………………………………………………………（5.6）

k 0 = −∞ k 1 = −∞と表現しよう．すると，入力 x[n 0, n 1]に対するシステムの応答が次のように表現される．

y[ n 0, n1] = T {x[ n 0, n1]}
=T

∑

k0

= ∑
k0

x [ n 0 ，n 1 ]= ∑x[k 0, k1]δ [ n 0 − k 0, n1 − k1]k1

x[k0, k1] T {δ [ n 0 − k 0, n1 −k 1]} （ 線形性 ）k1Tk0 {・} k1, k ] h [n − k , n − k ]y [xn[k0 0，n 11]＝T {0x [ n 00 ，n11 ] } 1（a）一般的な応答

図 5.16（ シフト不変性）δ[ n 0 ，n 1 ]T {・}h [ n 0 ，n 1 ]＝T {δ[ n 0 ，n 1 ] }（b）インパルス応答

システムの応答とインパルス応答

5.3

線形シフト不変システム

97

=T

∑

k0

= ∑
k0

= ∑
k0

x[k0, k1]δ [ n 0 − k0, n1 − k1]k1

x[k0, k1] T {δ [ n 0 − k0, n1 − k1]} （ 線形性 ）k1

x[k0, k1] h [ n 0 − k0, n1 − k1] （ シフト不変性 ） ……………………………（5.7）
k1

この誘導では，T {・}の線形性とシフト不変性を利用した．最後の結果は 2 次元の畳み込み演算となっている．
これは，変数変換により∞

y[ n 0, n1] = ∑∞∑ h[k0, k 1] x[ n0 −k 0, n1 −k 1]……………………………………………………（5.8）

k 0 = −∞ k 1 = −∞と表現することもできる．マスクの範囲外にゼロ値の係数を仮定して式（5.2）を式（5.8）と比べると，マスク係数 w [k 0, k 1]はインパルス応答 h[ k 0, k 1]と

h[k0, k1] = w[ − k 0, −k 1]のように関係していることが分かる．
MATLAB では，2 次元の畳み込み演算を行う関数として conv2 関数が用意されている．Image
Processing Toolbox の imfilter 関数も，conv オプションを指定することで畳み込み演算を行う．
これは，係数配列をマスク係数とするか，180 °回転したインパルス応答とするかという違いにほかならない．
例題 5.6

インパルス応答

MATLAB で，次のコマンドを試してみよう．
ires = [ 1 2 3;
4 5 6;
7 8 9 ];
conv2(ires,1, full )次も試してみよう．
mask = [ 9 8 7;
6 5 4;
3 2 1];
filter2(mask,1, full )解
いずれもシステムのインパルス応答が得られ，同じ結果となる．
● システムの性質
線形シフト不変システムでは，インパルス応答 h [ n 0, n 1]の性質によってシステムを分類すること
98

第5章

画像の近傍処理ができる．以下に分類の例を示そう．
（1）サポート領域
インパルス応答が無限に広がるか有限の範囲に収まるかによって，1 次元の場合と同じように FIR
か IIR かに分類される（図 5.17）．例えば 3 × 3 マスクを用いた近傍処理は，インパルス応答の広がりが 3 × 3 のマスク・サイズに限定されるので，FIR フィルタと分類される．
（2）因果性
インパルス応答 h [ n 0, n 1]が，n 0 < 0 もしくは n 1 < 0 の範囲において非ゼロの係数を持たなければ，
そのシステムは因果的システムと呼ばれる（図 5.18）．
ただし，1 次元の場合と異なり，空間的な因果性はあまり問題にならない．画像処理においては，
むしろゼロ位相システムなど，非因果的なシステムを積極的に利用する．これまで紹介した各種近傍処理はすべてゼロ位相をもつ非因果的システムである．
位相特性については，次章で再度取り上げる．なお，多次元の場合，ある特定の変数，例えば垂直変数 n 0 のみ因果性を満たすシステムもあり得る．このようなシステムを準因果的システムという．
（3）可分離性
インパルス応答が，h [ n 0, n 1] = h 0 [ n 0] h 1 [ n 1]と変数ごとの 1 次元インパルス応答に分離して表現できるシステムを可分離システムと呼ぶ．分離できないシステムの方が一般的であり，これを非分離システムと呼ぶ［図 5.19
（a）］．
IIRシステム

1

1

0.5

0.5

h [n 0，n 1 ]h [n 0，n 1 ]FIRシステム

0

−0.5
10

0

−0.5
0

n 0 −10

−10

0

10

10

0

n0

n1
有限

−10

−10

0

10

n1

無限
サポート領域

図 5.17

FIR システムと IIR システム

n1

0

0

n1

0

n1

サポート領域n0

サポート領域（a）因果的

図 5.18n0

サポート領域n0（b）準因果的（c）非因果的システムの因果性

5.3

線形シフト不変システム

99

非分離システム

可分離システム
1次元畳み込みn0n0n1
表現できない1次元畳み込み

n1

n1

表現できる

h [ n 0 ，n 1 ]＝h 0 [ n 0 ]･h 1 [ n 1 ]（a）インパルス応答

図 5.19n1n0n0（b）分離処理

非分離システムと可分離システム

可分離システムは，∞u[ n 0, k1] = ∑ x[k 0,k 1]h0 [ n 0 −k 0]
k 0 = −∞

= h0 [ n 0 ] ∗ x[ n 0, k1]∞

y[ n 0, n1] = ∑ u[ n 0, k1]h1[ n1 − k 1]
k 1 = −∞

= h1[ n1] ∗ u[ n 0, n1]のように次元ごとの独立な畳み込み演算によって効果的に実現できる利点をもつ［図 5.19（b）］．
例題 5.7

インパルス応答の分離

3 × 3 の移動平均フィルタのインパルス応答が分離可能であることを示そう．
解3 × 3 の移動平均フィルタのインパルス応答はh[ n 0, n1] = h0 [ n 0 ] ⋅ h1[ n1]ただし，1hd [ n] = 3
0

1 n 1
その他

と表現できる．
実習 5.6

分離処理

M-file ： practice05̲6.m
3 × 3 の移動平均フィルタを用いた画像の平滑化を分離処理によって行ってみよう．

5.4

時間方向フィルタ

これまで，近傍処理として静止画像を対象とした空間処理の例を紹介した．近傍処理は映像の各
100

第5章

画像の近傍処理

フレームに適用できることはもちろんのこと，図 5.20 からも分かるように，時間軸方向についても適用できる．以下では，フレーム間平均処理およびフレーム間差分処理について紹介しよう．
● フレーム間平均処理
フレーム間平均は，時間方向に平均をとることでノイズの除去や急に変化する動作を除去する．2
フレーム間の平均をとるフィルタのインパルス応答は

1
1h[k ] = δ [k ] + δ [k − 1] ………………………………………………………………………………（5.9）
22と与えられる．
例題 5.8

フレーム間平均処理

AVI 形式の映像ファイルを読み込み，フレーム間平均処理を施して AVI 形式の映像ファイルに出力してみよう．
解
MATLAB による処理例を以下に示す．ただし，fileNameIn は入力ファイル名，fileNameOut
は出力ファイル名を保持する文字列変数とする．
% 入力ファイル
fileInfo = aviinfo(fileNameIn);frameRate = fileInfo.FramesPerSecond;nFrames = fileInfo.NumFrames;% 出力ファイル
clear mex;

k
時間

n1
水平
垂直

n0

図 5.20

時間方向フィルタ

5.4

時間方向フィルタ

101

aviObj = avifile(fileNameOut,...
'FPS',frameRate,...
'COMPRESSION','None');% フレーム間平均処理準備
framePre = aviread(fileNameIn,1);
picturePre = framePre.cdata;
frameFiltered.colormap = [];% フレーム間平均処理
for iFrame = 1:nFrames% 現フレームの読み出し
frameCur = aviread(fileNameIn,iFrame);
pictureCur = frameCur.cdata;% フィルタ処理
pictureFiltered = uint8(...
0.5*(double(pictureCur)...
+ double(picturePre)));% 処理フレームの出力
frameFiltered.cdata = pictureFiltered;aviObj = addframe(aviObj,frameFiltered);% 前フレームの更新
picturePre = pictureCur;
end;
aviObj = close(aviObj);
Image Processing Toolbox がある場合，フィルタ処理の部分で imlincomb 関数を利用できる．
● フレーム間差分処理
フレーム間差分処理は，時間方向に差分をとることで時間的変化分を抽出する．2 フレーム間の差分をとるフィルタのインパルス応答は

h[k ] = δ [k ] − δ [k − 1] …………………………………………………………………………………（5.10）と与えられる．なお，処理結果が非負の値となるよう絶対値をとることもある．
実習 5.7

フレーム間差分絶対値処理

M-file ： practice05̲7.m
AVI 形式の映像ファイルを読み込み，フレーム間差分処理を施し，絶対値をとって AVI 形式の映 像 フ ァ イ ル に 出 力 し て み よ う（ Image Processing Toolbox が あ る 場 合 ， 差 分 処 理 に は
imsubtract 関数を，差分絶対値を求めたいときには imabsdiff 関数を利用できる）．
102

第5章

画像の近傍処理

5.5

境界処理

画像や映像は，空間領域において有限な明確に定義されたサポート領域をもつ．すなわち，解像度や画素数と表現されるものである．画像にフィルタ処理を施す際には，入力画像のサポート領域
外にある未知の画素値が必要となる．畳み込み演算を行った場合は，出力の画素数増加問題も生じる．このことは，境界部分で 1 次元音声処理とは異なった対策が要求されることを意味する．以下では，こうした問題の解決法として，ゼロ値拡張法，周期拡張法，対称拡張法について解説する．
● ゼロ値拡張法
ゼロ値拡張法は，図 5.21（a）に示すように領域外の画素値にゼロ値を仮定する．すなわち，画像x [ n 0, n 1 ]のサイズが垂直×水平＝ N0 × N1 のとき，

x [ n 0, n 1 ] = 0 ,n 0 < 0 or n 0 > N0 − 1 or n1 < 0 or n1 > N1 − 1のように仮定する．これまで示してきた処理例は，すべてこのゼロ値拡張を行っていた．このゼロ値拡張は簡便だが，平滑化処理では処理画像に黒い縁が発生し，先鋭化処理でも処理画像に白や黒

処理

原画像

ゼロ値

棄却

処理

原画像

クリッピング

周期拡張

クリッピング

棄却

拡張例（境界部の線は実際にはない）

拡張例（a）ゼロ値拡張法（b）周期拡張法
処理

原画像

対称拡張

棄却

拡張例
（境界部の線は実際にはない）（c）対称拡張法

図 5.21境界の拡張法

5.5

境界処理

103

図 5.22

黒い縁発生

回り込み発生

良好な結果（a）ゼロ値拡張（b）周期拡張（c）対称拡張

各種拡張法による処理結果（左下境界部拡大図）の縁が発生する問題がある（図 5.22）．
● 周期拡張法
周期拡張法は，図 5.21（b）に示すように画像に周期性を仮定する．すなわち，画像 x [ n 0, n 1 ]のサイズが垂直×水平＝ N0 × N1 のとき，次式のように仮定する．

x[ n 0, n1] = x[ n 0 − 0 N0, n1 −  1 N1 ]
周期信号に対する畳み込み演算の結果は，同じ周期をもつ周期信号となる．すなわち，1 周期に着目すれば画素数増加の問題が生じない．また，DFT 領域での積演算と等価である．しかし，他方の境界からの色の回り込みが問題となる（図 5.22）．
● 対称拡張法
対称拡張法は，図 5.21（c）に示すように画像の境界部に対称性を仮定する．すなわち，x [ n 0 , n 1 ] = x [− n 0 + 2 c 0 , n 1 ] = x [ n 0 , − n 1 + 2 c 1 ]のような関係を仮定する．c0，c1 は，それぞれの軸における対称の中心である．例えば，cd = 0，Nd
− 1 と選択することは，図 5.23
（a）の Ws
（Whole-sample Symmetry）の対称性を，cd = −1/2，Nd − 1/2と選択することは図 5.23（b）の HS（Half-sample Symmetry）の対称性を仮定することに相当する．対称拡張法は境界部が良好に仕上がる利点をもつ（図 5.22）．
例題 5.9ゼロ値拡張法と対称拡張法（1 次元）

次のインパルス応答 h[n]をもつ 1 次元の線形システムに，次の 1 次元信号 x[n]を入力したときに得られる出力を，ゼロ値拡張法，対称拡張法（HS）により求めてみよう．

1
1, h[ − 1] = h[1] =2
4x[ 0 ] = 1, x[1] = 2, x[ 2] = 4, x[ 3] = 2h[ 0 ] =解
ゼロ値拡張法の場合，
104

第5章

画像の近傍処理HSWS（a）サンプル上に対称軸

図 5.23（b）サンプル間に対称軸二つの対称性1
1
1⋅ 0 + ⋅ 1+ ⋅ 2 =1
4
2
4
1
1
1
yz[1] = ⋅ 1 + ⋅ 2 + ⋅ 4 = 2.25
4
2
4
1
1
1
yz[ 2] = ⋅ 2 + ⋅ 4 + ⋅ 2 = 3
4
2
4
1
1
1
yz[ 3] = ⋅ 4 + ⋅ 2 + ⋅ 0 = 2424yz[ 0 ] =対称拡張法（HS）
の場合，

1
1
1
ys[ 0 ] = 1 ⋅ 1 + 1 ⋅ 1 + 1 ⋅ 2 = 1.25
ys[ 0 ] = 4 ⋅ 1 + 2 ⋅ 1 + 4 ⋅ 2 = 1.25
4
2
4
1
1
1
ys[1] = 1 ⋅ 1 + 1 ⋅ 2 + 1 ⋅ 4 = 2.25
ys[1] = 4 ⋅ 1 + 2 ⋅ 2 + 4 ⋅ 4 = 2.25
4
2
4
1
1
1
ys[ 2] = 1 ⋅ 2 + 1 ⋅ 4 + 1 ⋅ 2 = 3
ys[ 2] = 4 ⋅ 2 + 2 ⋅ 4 + 4 ⋅ 2 = 3
4
2
4
1
1
1
ys[ 3] = 1 ⋅ 4 + 1 ⋅ 2 + 1 ⋅ 2 = 2.5
ys[ 3] = 4 ⋅ 4 + 2 ⋅ 2 + 4 ⋅ 2 = 2.54
24
Image Processing Toolbox の imfilter 関数では，デフォルトでゼロ値拡張法を使用する．境界に関するオプションとして circular を指定すると周期拡張法が適用され，symmetric を指定すると対称拡張法（HS）が適用される．また，配列を拡張するための padarray 関数も用意されている．
実習 5.8

境界処理

M-file ： practice05̲8.m
9 × 9 の移動平均フィルタなど，大きなマスクを用いた平滑化を行い，ゼロ値拡張法，周期拡張法，対称拡張法の結果を比較してみよう．

章末問題
問題 5.1

エンボス・フィルタ（MATLAB 演習）

次のマスクを用いて画像の輝度成分に線形フィルタ処理を施すと，浮き彫り（エンボス）効果が得
章末問題

105

られる．試してみよう．ただし，処理結果に負の値が現れるので double で処理し，0.5 を加算する．

問題 5.2

1

0

0

0

0

0

0

0

−1

フィルタの係数配列（MATLAB 演習）

さまざまなガウシアン・フィルタ，LoG フィルタをサイズ，標準偏差パラメータを変えながら設計
し，係数配列を mesh 関数で観察してみよう．
問題 5.3

加重移動平均フィルタの分離処理（MATLAB 演習）

図 5.2（b）に示した加重移動平均フィルタのインパルス応答が分離可能であることを示し，画像の平滑化を分離処理によって行ってみよう．
問題 5.4

フレームごとの輪郭抽出（MATLAB 演習）

映像データを読み込み，フレームごとに勾配フィルタをかけて結果を映像として表示してみよう．
問題 5.5

境界処理（MATLAB 演習）

次の配列に対して，4 近傍ラプラシアン・フィルタ処理および Prewitt フィルタ処理を施してみよう．ただし，境界処理として対称拡張法（HS）を適用すること．

問題 5.6

18

9

9

9

27

9

9

9

36

9

9

9

境界処理
（MATLAB 演習）

画像 firenzeRgb.jpg の輝度成分に対して，4 近傍ラプラシアン・フィルタ処理および Prewitt
フィルタ処理を施してみよう．ただし，境界処理として対称拡張法（HS）を適用すること．
参考文献（1）貴家仁志；よくわかるディジタル画像処理，CQ 出版社，1996 年．
（2）Rafael C. Gonzalez and Richard E. Woods ； Digital Image Processing, 2nd Ed.，Prentice Hall，2001．
（3）John, W. Woods ； Multidimensional Signal, Image and Video Processing and Coding，Academic Press，2006．

106

第5章

画像の近傍処理

第6章

画像の拡大・縮小処理

本章では，画像の拡大処理と縮小処理をフィルタリングの観点から解説しよう．拡大・縮小を行うシステムは，複数の異なる標本化周期のディジタル信号を扱うマルチレート・システムとして解釈できる．マルチレート・システムの構成要素，基本的なレート変換器，設計手法を簡単にまとめる．また，映像のフレーム・レート変換についても触れる．

6.1

画像のマルチレート信号処理

画像の拡大・縮小処理の問題は，マルチレート信号処理の問題として取り扱うことができる．マルチレート信号処理については後述することにして，まずは簡単な例を試してみよう．
● 間引きによる縮小処理
例題 6.1

間引きによる縮小処理

図 6.1 に示す画像に対して間引きによる縮小処理を施してみよう．間引き処理は，図 6.2 に示す
ように，2 × 2 ブロックの 4 画素のうち，○印 1 画素を残し，×印の 3 画素を捨てることで実現しよう．
解
MATLAB による処理例を以下に示す．pictureGray は原画像を保存する配列である．

pictureGrayDownsampled = ...
pictureGray(1:2:end, 1:2:end);
もしくは，

pictureGrayDownsampled = ...
6.1

画像のマルチレート信号処理

107

0
1
2

0 1 2 …

n1

⁝

n0

図 6.2

図 6.1

図 6.3

間引きによる縮小画像

間引き処理

原画像

downsample(...
downsample(pictureGray,2).',2).';
図 6.3 に処理結果を示す．結果として，画像の大きさが 1/4（垂直 1/2 ×水平 1/2）のサイズに縮小される．
図 6.3 より，細かいしま模様の部分に図 6.1 と異なる方向の荒いしま模様が現れていることを確認できる．これは，間引き処理による高周波成分から低周波成分への折り返し成分（エリアジング）に起因する．後ほど詳しく解説しよう．
なお，Image Processing Toolbox では，sizeNew = size(pictureGray)./[2 2];
pictureGrayDownsampled = ...
imresize(pictureGray,sizeNew);と imresize 関数を利用しても同じ処理を実現できる．
実習 6.1

間引きによる縮小処理

M-file ： practice06̲1.m
間引き処理によって画像を 1/D0 D（垂直1/D0 ×水平 1/D1）のサイズに縮小しよう．
1● 平均による縮小処理
では，間引き処理による縮小処理に代わって，平均による縮小処理を試してみよう．図 6.4 に，
4 × 4 の配列を平均操作によって 1/2 × 1/2 に縮小する処理例を示す．この処理は，画像配列を大きさ
2 × 2 のブロックに分け，それぞれの平均値を求めて出力画素値としている．より一般的な 1/D 0 ×
1/D1 の縮小処理の場合，大きさ D0 × D1 のブロックに分割し，それぞれの平均値を出力画素とすれば
108

第6章

画像の拡大・縮小処理

0

2

4

4

4

6

4

4

0

6

4

4

2

4

6

6

2×2ブロック
02

4

6(0＋2＋4＋6)/4＝3
平均値

x [ n 0 ，n 1 ]3

4

1/2×1/2縮小処理の例

35y [ m 0 ，m 1 ]図 6.5

平均による縮小画像

図 6.4 平均による縮小処理の例

よい．
例題 6.2

平均による縮小処理

図 6.1 に示す画像を 2 × 2 の大きさのブロックに分解し，それぞれのブロックの平均値を出力することによって，画像を 1/4（垂直 1/2 ×水平 1/2）のサイズに縮小してみよう．
解
MATLAB による処理例を以下に示す．pictureGray は原画像を保存する uint8 型の配列とする．
pictureGrayDecimated = uint8(( ...
double(pictureGray(1:2:end,1:2:end)) + ...
double(pictureGray(2:2:end,1:2:end)) + ...
double(pictureGray(1:2:end,2:2:end)) + ...
double(pictureGray(2:2:end,2:2:end)) )/4);
図 6.5 に平均による縮小画像を示す．この図では分かりにくいが，先の間引き処理の結果（図 6.3）において生じたエリアジングが，図 6.5 の画像では目立たなくなることを確認できる．
エリアジング回避のための方法は平均処理に限らず，より一般的なものを選択できる．画像の縮小処理の設計については後述する．
なお，Image Processing Toolbox では，sizeNew = size(pictureGray)./[2 2];
pictureGrayDecimated = ...
imresize(pictureGray, sizeNew, ...
'bilinear',ones(2,2)/4);と imresize 関数を利用しても同じ処理を実現できる．
6.1

画像のマルチレート信号処理

109

0

2

4

4

4

6

4

4

0

6

4

4

2

4

6

6

x [ n 0 ，n 1 ]2×2拡大処理の例

0

0

2

2

4

4

4

4

0

0

2

2

4

4

4

4

4

4

6

6

4

4

4

4

4

4

6

6

4

4

4

4

0

0

6

6

4

4

4

4

0

0

6

6

4

4

4

4

2

2

4

4

6

6

6

6

2

2

4

4

6

6

6

6

y [ m 0 ，m 1 ]図 6.6

ゼロ次ホールドによる拡大処理の例

実習 6.2

図 6.7

原画像

平均による縮小処理

M-file ： practice06̲2.m
画像を D0 × D1 の大きさのブロックに分解し，それぞれのブロックの平均値を出力することによって画像の大きさを 1/D0 D（垂直1/D0 ×水平 1/D1）のサイズに縮小しよう．
1● ゼロ次ホールドによる拡大処理
では次に，拡大処理についても試してみよう．図 6.6 に，4 × 4 の配列をゼロ次ホールドによって
2 × 2 倍に拡大する処理例を示す．この処理は，各画素値を 2 × 2 のブロックに拡大し，出力画像に配している．より一般的な U0 × U1 の拡大処理では，各画素を大きさ U0 × U1 のブロックに拡大し，出力画像に配してやればよい．なお，ゼロ次ホールド法は，最近傍（Nearest Neighbor）
法とも呼ばれる．
例題 6.3

ゼロ次ホールドによる拡大処理

図 6.7 に示す画像の各画素を，同じ画素値を一様にもつ 2 × 2 の大きさのブロックに置き換える（ゼロ次ホールド処理を施す）
ことで，画像を 4 倍（2 × 2）のサイズに拡大しよう．
解以下に，MATLAB による処理例を示す．pictureGray は原画像を保存する uint8 型の配列とする．

pictureGrayIntpd = ...
zeros(size(pictureGray).*[2 2],'uint8');
pictureGrayIntpd(1:2:end,1:2:end) = ...
pictureGray;
pictureGrayIntpd(2:2:end,1:2:end) = ...
pictureGray;
pictureGrayIntpd(1:2:end,2:2:end) = ...
pictureGray;
110

第6章

画像の拡大・縮小処理

図 6.8

ゼロ次ホールドによる拡大画像

pictureGrayIntpd(2:2:end,2:2:end) = ...
pictureGray;
図 6.8 にゼロ次ホールドによる拡大画像を示す．2 × 2 の大きさのブロックごとに画素値が一様な値をもつため，ブロック状の効果が知覚されてしまう．
Image Processing Toolbox では，sizeNew = size(pictureGray).*[2 2];
pictureGrayIntpd = imresize(...
pictureGray, sizeNew, 'nearest');と imresize 関数を利用しても同じ処理を実現できる．
実習 6.3

ゼロ次ホールドによる拡大処理

M-file ： practice06̲3.m
画像の各画素を，同じ画素値を一様にもつ U0 × U1 の大きさのブロックに置き換えることで，画像の大きさを U0 × U1 倍のサイズに拡大しよう．
6.1

画像のマルチレート信号処理

111

6.2

マルチレート信号処理とは？

ディジタル信号は，アナログ信号のサンプリングと量子化によって与えられる．ここで，図 6.9 を眺めながら標本化の操作を思い出してほしい．
● 標本化の復習
標本化とは，連続的に変化するアナログ信号について，ある一定の間隔 TS でその瞬時値を取得し，数列に置き換える操作である．例えば音声信号の場合，1/8000 秒という標本化間隔がしばしば利用される．この数値は，元のアナログ信号に戻すための情報として，以後もその数列につきまとうことになる．標本化間隔 TS の代わりに，その逆数である標本化周波数 FS を用いることも多い．標本化
周波数は，サンプリング・レートあるいは単にレートとも呼ばれる．
いま，異なる標本化間隔 TS0，TS1 で標本化された二つの数列 x0 [n]，x1 [m]を仮定しよう．この二つの数列の足し算 x0 [l]＋ x1 [l]にはどのような意味があるのだろうか？
少なくとも，各瞬時値• x0 [l ] = x0 (l TS0 )• x1[l] = x1 (l TS1)をとらえた時刻 TS1 と TS0 が常に一致することはなく，その結果の有用性は乏しい．そこで，標本化間隔をそろえることが重要となる．これは可能だろうか？
答えは Yes である．この実現方法は，大きく以下の二つの方式に分類することができる（図 6.10）．

• いったんアナログ信号に復元し，同じ標本化間隔にて再標本化を施す方式• ダウン・サンプラ，アップ・サンプラ，ディジタル・フィルタからなるオール・ディジタル方式
特に後者は，経年変化やノイズの影響を受けにくいといったディジタルの利点を保ったまま実現
できる．このように，複数の異なる標本化間隔あるいはサンプリング・レートを取り扱う信号処理をマルチレート信号処理と呼ぶ．
● レート変換の応用例
マルチレート信号処理の応用例は多岐に亘り，現在の情報通信技術の根幹をなす重要なものが多数存在する．音声・音響データなどのフォーマット変換器はそのよい例である．例えば，44.1kHz のレート（標本化間隔の逆数）をもつ CD データと 96kHz のレートをもつ DVD Audio データの間のフォーマット変換がある．画像の縮小処理や拡大処理は多次元のマルチレート信号処理として解釈

x (t )x [n ]

標本化

t

図 6.9
標本化の復習

112

第6章

Ts

画像の拡大・縮小処理

T s ：標本化周期
F s ＝1/T s ：標本化周波数nアナログ介在Fs

F's
D-Aコンバータ

A-Dコンバータ

アナログに戻して再サンプリング

ディジタルのみ
Fs

F's

ディジタルSRC
線形時変（LTV）システムで可能

図 6.10

サンプリング・レート変換器（SRC）

D

レートを1/D に下げる記号

図 6.11

ダウン・サンプラ（間引き器）

でき，後述するように，より一般的なシステムが存在する．
まずは準備として，二つの 1 次元の処理要素を導入しよう．一つはダウン・サンプラであり，もう一つはアップ・サンプラである．これらの処理そのものは非常に単純である．しかし，このたった二つの処理要素を加えるだけで，線形時不変システムのみでは実現不可能だったさまざまな処理が実現可能となる．
● ダウン・サンプラ
ダウン・サンプラは，サンプリング・レートを整数分の 1 に下げる処理要素である．その動作から間引き器とも呼ばれる．また，この処理そのものをダウン・サンプリングあるいは間引き処理と呼ぶ．D を正の整数としてサンプリング・レートを 1/D に下げる場合，ダウン・サンプラは D サンプルごとに 1 点のサンプルを残し，ほかの D − 1 個のサンプルを単純に棄却する（捨ててしまい，以後の処理で用いない）．
（1）入出力関係
ダウン・サンプラの入出力関係を式で表現すると

y[m] = x[ Dm] …………………………………………………………………………………………（6.1）となる．また，本稿におけるダウン・サンプラの記号を図 6.11 に示す．
例題 6.4

ダウン・サンプラ

間引き率 2 のダウン・サンプリングを実行しよう．
解以下に MATLAB による処理例を示す．inputSeq は入力信号を保存する配列である．

6.2

マルチレート信号処理とは？

113

1

x [n ]

0.5
0
−0.5
−1

0

5

10

15

20

25

30

n
（a）入力数列1y [m ]

0.5
0
−0.5
−1

0

2

4

6

8

10

12

14

16

m
（b）出力数列

図 6.12

間引き率 2 のダウン・サンプリングの例

dFactor = 2; % 間引き率
outputSeq = downsample(inputSeq, dFactor);
処理結果の例を図 6.12 に示す．なお，点線は入力数列の値を直線で結んだものである．奇数番目のサンプルが単に捨てられるだけの結果となる．
実習 6.4

ダウン・サンプラ

M-file ： practice06̲4.m
間引き率 2 以上の，より一般的なダウン・サンプリングを実行しよう．
（2）ダウン・サンプラと周波数スペクトラム
ダウン・サンプラのみでもレートを下げるという目的は達成される．しかし，これは単にサンプ
リング・レートを下げるというだけである．元の信号がもつ周波数スペクトラムは折り返し（エリアジング）成分によるひずみをまともに受けてしまう．
例題 6.1 で示した画像の縮小処理も，エリアジングの影響を受けていると解釈できる．この点を理
114

第6章

画像の拡大・縮小処理

解するために，ダウン・サンプリングと周波数スペクトラムとの関係を見てみよう．
ダウン・サンプラの入力信号 x [n]と出力信号 y [m]は共に数列である．それぞれの z 変換を X (z)，Y (z)として，これらの間の関係を見てみよう．
例題 6.5

ダウン・サンプラの入出力関係

間引き率 2 のダウン・サンプラの入出力関係を z 変換領域で表現してみよう．
解
まず，入力数列 x[n]のうち，棄却する奇数番目のサンプルをゼロ値に置き換えよう．この数列は，

1u [n] = {x [n] + (−1) n x [n]}2のように x [n]とその π 変調数列 e j π n x [n] = (−1) n x [n]の平均操作で与えられる．u [n]の z 変換 U(z)は，

1U(z) = {X( z) + X(− z)}2と表現される．結局，U(z)を介して，X(z)と Y(z)の関係が∞Y ( z) = ∑ y [m]z − m∞m =−∞Y (z) = ∑y [m]z − m∞m =−∞= ∑ u [2m]z − m
∞
m =−∞

= ∑
u [2m]z − m
∞
m =−∞

−

∞
m =−∞

−

n

= ∑ u [n]z 2n= ∑ 1u [n]z 2 111m =−∞2(z ) = {X(z 2 ) + X(−z 2 )}
=U
1
1
1
12
= U( z2 ) = {X( z2 ) + X(−z 2 )}2と導かれる．
より一般的に間引き率が D の場合は，2πk/D 変調成分間の平均 U(z) =Y (z) =

D−1

(

)

2πk
1
−j
D−1
X(e D z) を用いて
∑
k
=
0
D

1
1
X WDk z D …………………………………………………………………………………（6.2）∑
D k =0− 2πという関係が導かれる．ただし， WD = e j D である．
（3）周波数スペクトラム式（6.2）に z = e jω を代入すると，離散時間フーリエ変換領域での入出力関係がY (e jω ) =D−1(

ω −2 π k
j
1
X e D
∑
D k=0

) ……………………………………………………………………………（6.3）のように導かれる．k = 0 以外の変調成分は，ナイキスト周波数以下の低いサンプリング・レートの標本化で生じるエリアジングそのものである（図 6.13）．

6.2

マルチレート信号処理とは？

115

■ D ＝2のとき

x [n ]｜X ( j Ω｜)（FT）
フーリエ変換

n

離散時
間フー
リ

0

エ変換
（DT

FT）

｜X ( e jω )｜0y [m ]

π

2πF s

Ω

2π

ω

4πF's
＝2πF sΩ2πω)｜Y ( j Ω｜
フーリエ変換
（FT）

m
離散時
間フー
リ

0

エ変換
（DT

FT）

｜Y ( e jω )｜2πF's
エリアジング0

図 6.13

間引き率 2 のダウン・サンプリングの周波数スペクトラム

例題 6.6

ダウン・サンプラと周波数スペクトラムπ

間引き率 2 のダウン・サンプリングを実行し，その周波数スペクトラムの変化を見てみよう．
解
間引き率 2 の場合，ダウン・サンプル前後の信号間の周波数スペクトラムは
ω
ω
j
j
1
Y (e jω ) = {X (e 2 ) + X (−e 2 )}2のように関係する．以下は MATLAB による処理例である．例題 6.4 の解で示した処理の後に実行する．

subplot(2,1,1);[H,W] = freqz(inputSeq);plot(W/pi,20*log10(abs(H)));subplot(2,1,2);[H,W] = freqz(outputSeq);plot(W/pi,20*log10(abs(H)));図 6.14 に処理結果の例を示す．

116

第6章

画像の拡大・縮小処理

｜X ( e jω )｜[dB]

20
0
−20
−40
−60
0

0. 2

0. 4

0. 6

0. 8

1

0. 6

0. 8

1

ω[rad]/π（a）入力数列｜Y ( e jω )｜[dB]

20
0
−20
−40
−60
0

0. 2

0. 4
ω[rad]/π（b）出力数列

図 6.14

間引き率 2 のダウン・サンプリングの周波数スペクトラム例

図 6.14 より，ダウン・サンプリングによってスペクトラムの形状が引き伸ばされた上，ひずむことが確認できる．
実習 6.5

ダウン・サンプルと周波数スペクトラム

M-file ： practice06̲5.m
間引き率 2 以上のより一般的なダウン・サンプリングを実行し，その周波数スペクトラムの変化を見てみよう．
● アップ・サンプラ
アップ・サンプラは，サンプリング・レートを整数倍に上げる処理要素である．その動作からゼロ値挿入器とも呼ばれる．また，この処理そのものをアップ・サンプリング，あるいはゼロ値挿入処理と呼ぶ．U を正の整数としてサンプリング・レートを U 倍に上げる場合，アップ・サンプラは連
続する二つのサンプル間に U − 1 個のゼロ値サンプルを挿入する．
（1）入出力関係
アップ・サンプラの入出力関係を式で表すと，
6.2

マルチレート信号処理とは？

117

U

レートをU 倍に上げる

記号

図 6.15y[m] =

x0m
U

m = Unその他

アップ・サンプラ（ゼロ値挿入器）……………………………………………………………………………
（6.4）となる．また，本稿におけるアップ・サンプラの記号を図 6.15 に示す．
例題 6.7

アップ・サンプラ

補間率 2 のアップ・サンプリングを実行しよう．
解以下に MATLAB による処理例を示す．inputSeq は入力信号を保存する配列である．
uFactor = 2;
outputSeq = upsample(inputSeq,uFactor);
処理結果の例を図 6.16 に示す．なお，点線は入力数列の値を直線で結んだものである．奇数番目のサンプルとして単にゼロ値が挿入されるだけの結果となる．
実習 6.6

アップ・サンプラ

M-file ： practice06̲6.m
補間率 3 以上の，より一般的なアップ・サンプリングを実行しよう．
（2）アップ・サンプラと周波数スペクトラム
アップ・サンプラのみでもレートを上げるという目的は達成できる．しかし，単にゼロ値を挿入するだけではなく，新たに挿入されたサンプル点がもともとのサンプル点の間を滑らかに補間することが望まれる．例題 6.3 で示したゼロ次ホールド処理はその一例である．
後述するように，アップ・サンプリングは周波数スペクトラムにイメージングを生ずる．ゼロ次
ホールド処理は，このイメージングを抑圧する効果を有している．この点を理解するために，アップ・サンプリングと周波数スペクトラムとの関係を見てみよう．
例題 6.8

アップ・サンプラの入出力関係

補間率 2 のアップ・サンプラの入出力関係を z 変換領域で表現してみよう．
解
アップ・サンプラの出力 y[m]の z 変換 Y(z)は，
118

第6章

画像の拡大・縮小処理

1

x [n ]

0.5
0
−0.5
−1

0

2

4

6

8

10

12

14

16

n
（a）入力数列1y [m ]

0.5
0

−0.5
−1

0

5

10

15

20

25

30

m
（b）出力数列

図 6.16 補間率 2 のアップ・サンプリングの例

2

2

（

2

1

0）

2

のように展開される．従って，
Y (z) = X(z2 )という関係が導かれる．
より一般的に，補間率が U の場合には，

Y (z) = X(zU ) ……………………………………………………………………………………………（6.5）という関係が導かれる．
（3）周波数スペクトラム式（6.5）に z = e jω を代入すると，離散時間フーリエ変換領域の入出力関係が6.2

マルチレート信号処理とは？

119

■ U ＝2のとき

x [n ])｜X ( j Ω｜
フーリエ変換
（FT）

離散時
間フー
リエ変
換（D
T

0

FT）

｜X ( e jω )｜0y [m ]

π

2πF s

Ω

2π

ω

｜Y ( j Ω｜)（FT）
フーリエ変換
0

離散時
間フー
リエ変
換（D
T

FT）

図 6.17ΩπF's＝2πF s
イメージング｜Y ( e jω )｜補間率 2 のアップ・サンプリングの周波数スペクトラム

0

π

2π

ω

Y (e jω ) = X(e jUω ) ………………………………………………………………………………………（6.6）のように導かれる（図 6.17）．上式は，正規化周波数軸を 1/U 倍に縮めることを意味する．いま，x[n]のサンプリング・レートが FS = 8［kHz］であったと仮定しよう．x[n]を補間率 U = 2 でアップ・サンプ
リングすると，F'S = UFS = 2 × 8［kHz］= 16［kHz］が新しいサンプリング・レートとなる．もともとは低周波成分のコピーであった 8［kHz］（ω = 2π）付近のスペクトラムが高周波成分（ω = π）として存在することになる．これがイメージング成分となる．補間率 U のアップ・サンプリングでは，0 から 2π（すなわち，0 から F'［Hz］）の間に U − 1 個のイメージングが生じる．
S
例題 6.9アップ・サンプラと周波数スペクトラム

補間率 2 のアップ・サンプリングを実行し，その周波数スペクトラムの変化を見てみよう．
解
補間率 2 の場合，アップ・サンプル前後の信号間の周波数スペクトラムはY (e jω ) = X(e j2ω ) ……………………………………………………………………………………（6.7）のように関係する．図 6.18 に MATLAB による処理結果の例を示す．
実習 6.7

アップ・サンプルと周波数スペクトラム

M-file ： practice06̲7.m
補間率 3 以上の，より一般的なアップ・サンプリングを実行し，その周波数スペクトラムの変化を見てみよう．
120

第6章

画像の拡大・縮小処理

｜X ( e jω )｜[dB]

20
0
−20
−40
−60
0

0. 2

0. 4

0. 6

0. 8

1

0. 6

0. 8

1

ω[rad]/π（a）入力数列｜Y ( e jω )｜[dB]

20
0
−20
−40
−60
0

0. 2

0. 4
ω[rad]/π（b）出力数列

図 6.18 補間率 2 のアップ・サンプリングの周波数スペクトラム例

6.3

レート変換器

本節では，ダウン・サンプラやアップ・サンプラを使ったレート変換器の基本構成について概説しよう．以下では，整数分の 1 にレートを下げるデシメータ，整数倍にレートを上げるインターポ
レータ，そしてこれらの組み合わせによる有理数比レート変換器について，順に説明する．
● デシメータ
デシメータは，整数分の 1 にレートを下げるレート変換器である．その基本構成は，図 6.19 に示されるようにフィルタとダウン・サンプラからなる．このフィルタは，ダウン・サンプリングによって生じるエリアジングをあらかじめ回避する役割をもち，デシメーション・フィルタと呼ばれる．
（1）理想フィルタ
ダウン・サンプリングによって生じるエリアジングは，2 π k/D 変調成分の折り返しによって生じ
x [n ]
Fs

図 6.19h [n ]

u [n ]

Dy [m ]
F's ＝ F s /D

デシメータの基本構成

6.3

レート変換器121

｜X ( e jω )｜

−

π
2

0

｜H I ( e jω )｜

π
2

π

2π

ω

π
2

π

2π

ω

｜U ( e jω )｜

−

π
2

0

｜Y ( e jω )｜図 6.20
間引き率 2 のデシメータの周波数
スペクトラム（DTFT）

0

エリアシング回避π

2π

ωる．ダウン・サンプラへの入力信号があらかじめ± π/D で帯域制限されていれば，スペクトラムの重なりが生じない．従って，デシメーション・フィルタ h [n]の理想周波数応答 HI (e jω )はπω <D…………………………………………………………………………
（6.8）
π≤ ω <πD⎧1⎪
HI (e ) = ⎨⎪0⎩jω

のように与えられる（図 6.20）．
（2）平均フィルタ式（6.8）の理想特性を持つフィルタは sinc 関数を標本化したものとして与えられ，無限のインパル
ス応答をもち，実現不可能である．そこで実際には，この理想特性を近似したフィルタを利用する．

100……………………………………………………………………………
（6.9）

その他

と表現されるフィルタは間引き処理を平均操作で与えるが，これは近似フィルタの一種と解釈できる．
例題 6.10

平均フィルタの周波数応答

D = 2 の場合について，式（6.9）
で与えられる平均フィルタの周波数振幅応答を見てみよう．
解以下に MATLAB のコマンド例を示す．
122

第6章

画像の拡大・縮小処理

20
10
0

｜H ( e jω )｜[dB]

−10
−20
−30
−40
−50
−60
−70

図 6.21
平均フィルタ（D ＝ 2）の周波数
振幅応答

−80

0

0.2

0.4

0.6

0.8

1

ω[rad]/πdFactor = 2; % 間引き率
averageFilter = ones(dFactor,1)/dFactor;[H,W] = freqz(averageFilter);plot(W/pi,20*log10(abs(H)));図 6.21 に結果を示す．大ざっぱではあるが，π/2 よりも高い周波数成分をカットすることが分
かる．
実習 6.8

平均フィルタの周波数応答

M-file ： practice06̲8.m
D > 2 の場合について，式（6.9）
で与えられる平均フィルタの周波数振幅応答を見てみよう．
● インターポレータ
インターポレータは，整数倍にレートを上げるレート変換器である．その基本構成は，図 6.22 に示されるようにアップ・サンプラとフィルタからなる．このフィルタは，インターポレーション・
フィルタと呼ばれ，アップ・サンプリングによって生じるイメージングを抑圧し，サンプル間を滑らかに補間する役割をもつ．
（1）理想フィルタ
アップ・サンプリングによって生じるイメージングは，2π/U ごとに現れる．アップ・サンプリン
6.3

レート変換器123

x [n ]v [m ]

UFs

図 6.22y [m ]

f [m ]｜X ( e jω )｜F's ＝ U F s

インターポレータの基本構成
0｜V ( e jω )｜

π

2

π
2

｜Y ( e jω )｜図 6.23
補間率 2 のインターポレータの周波数スペクトラム（DTFT）

ω

2π

ω

｜F I ( e jω )｜

0
π
−
2

2π

0

π

イメージング除去

2πω

グ後の信号 v [m]を± π /U で帯域制限すれば，2π（すなわち F'S ＝ UF［）ごとのスペクトラムのみを
S Hz］
取り出し，イメージング成分を除去できる．もともと F'S で標本化された信号を得ることが目的なので，振幅を調整するための利得 U をかけることに注意すると，インターポレーション・フィルタ f [m]の理想周波数応答は，⎧U ω < π⎪U
F1(e ) = ⎨……………………………………………………………………………
（6.10）π≤ ω <π⎪0U⎩jωと与えられる（図 6.23）．
（2）ゼロ次ホールド・フィルタ式（6.10）の理想特性をもつフィルタは，理想デシメーション・フィルタと同じように実現不可能である．そこで実際には，理想特性を近似したフィルタを利用することになる．

1 0
0 その他

………………………………………………………………………………（6.11）と表現されるフィルタはゼロ次ホールド処理を与える．これは一種の近似となっている．
（3）線形補間フィルタ

1
0

124

第6章

その他

……………………………………………………………………………
（6.12）

画像の拡大・縮小処理20
10｜F ( e jω )｜[dB]

0
−10
−20
−30
−40
−50
−60

図 6.24線形補間フィルタ
（U ＝ 2）の周波数振幅応答

−70
0

0.2

0.4

0.6

0.8

1

ω[rad]/πと表現されるフィルタは，線形補間処理を与える．これも一種の近似となっている．
例題 6.11線形補間フィルタの周波数応答

U = 2 の場合について，式（6.12）
で与えられる線形補間フィルタの周波数振幅応答を見てみよう．
解以下に MATLAB のコマンド例を示す．
% 補間率 2 の線形補間フィルタ
lineIntpFilter = [ 1 2 1 ]/ 2;% 周波数振幅応答表示[H,W] = freqz(lineIntpFilter);plot(W/pi,20*log10(abs(H)));図 6.24 に結果を示す．直流利得が 2（約 6［dB］）であり，π/2 よりも高い周波数成分をカットしている．
実習 6.9線形補間フィルタの周波数応答

M-file ： practice06̲9.m
U > 2 の場合について，式（6.12）
で与えられる線形補間フィルタの周波数振幅応答を見てみよう．

6.3

レート変換器125

デシメータx [n ]

図 6.25
有理数比レート変換器の基本構成

FsUv [ ]g [ ]

インターポレータu [ ]

Dy [m ]
F's ＝ U F s
D● 有理数比レート変換
前節で紹介したデシメータは，整数分の 1 にレートを下げるレート変換器であり，インターポレー
タは，整数倍にレートを上げるレート変換器である．これらを組み合わせることで，有理数比レート変換を実現できる．例えば，44.1kHz のレートをもつ CD データと 96kHz のレートを持つ DVD
Audio データの間のフォーマット変換が可能となる．
有理数比レート変換器の基本構成は，図 6.25 に示されるようにインターポレータとデシメータを縦続接続し，インターポレーション・フィルタとデシメーション・フィルタを共有した形となる．
通常，演算やフィルタ設計の効率化のため，U と D について，互いに素の関係のものを選択する．
（1）理想フィルタ
アップ・サンプリングによって生じるイメージングは，2 π /U ごとに現れる．アップ・サンプリン
グ後の信号 v [l]を± π /U で帯域制限すれば，イメージング成分を除去できる．また，信号 u [l]があらかじめ± π /D で帯域制限されていれば，ダウン・サンプリングによって生じるエリアジングは生じない．従って，インターポレーションで必要となる利得 U に注意すると，有理数比レート変換フィル
タ g [l]の理想周波数応答 GI (e jω )は，⎧⎛π π⎞⎪U ω < min ⎝ U , D ⎠
G I (e ) = ⎨………………………………………………………………
（6.13）π π⎪0 min ⎛⎝ , ⎞⎠ ≤ ω < π
U D⎩と与えられる（図 6.26）．
jω（2）線形補間フィルタと平均フィルタの縦続接続式（6.13）で表されるフィルタは実現不可能である．そこで，実際は近似フィルタを利用することになる．例えば，式（6.9）で表される平均フィルタと式（6.12）で表される線形補間フィルタを縦続接続することで，簡単な近似フィルタを与えることができる．
例題 6.12

縦続接続フィルタの周波数応答

U = 2，D = 3 の場合について，式（6.12）と式（6.9）で与えられるフィルタを縦続接続した場合の周
波数振幅応答を見てみよう．
解
MATLAB 上でのコマンド例を以下に示す．
% 直線補間フィルタのインパルス応答
lineIntpFilter = [1 2 1]/2;
126

第6章

画像の拡大・縮小処理

｜U ( e jω )｜｜X ( e jω )｜0｜V ( e jω )｜π2

図 6.26

ω

π
2

π

0

2π

ω

2π

ω

｜Y ( e jω )｜｜G I ( e jω )｜

0
π
−
2

2π

2π

ω

0

倍率 U /D ＝ 2/3 の有理数比レート変換器の周波数スペクトラム（DTFT）% 平均フィルタのインパルス応答
averageFilter = [1 1 1]/3;% 全フィルタのインパルス応答
totalFilter = ...
conv(lineIntpFilter, averageFilter)% 周波数振幅特性の表示[H,W] = freqz(totalFilter);plot(W/pi,20*log10(abs(H)));図 6.27 に結果を示す．直流利得が 2（約 6［dB］）であり，π /3 よりも高い周波数成分をカットしている．
実習 6.10線形補間フィルタの周波数応答

M-file ： practice06̲10.m
U = 2，D = 3 以外の場合についても，平均フィルタと線形補間フィルタで与えられる近似フィル
タの周波数振幅応答を見てみよう．
● フレーム・レート変換
日米のテレビ放送方式（NTSC）と欧州のテレビ放送方式（PAL/SECAM）では，映像の解像度やフレーム・レートが異なる．また，テレビ放送と映画の間にも映像フォーマットの違いがある．これ
ら異なるフォーマットの映像データを統一的に扱うためには，互いの変換技術が必要となる．画像の解像度変換については次節で解説することとし，ここではレート変換技術をフレーム・レート変
6.3

レート変換器

127

20
10

｜G ( e jω )｜[dB]

0
−10
−20
−30
−40
−50
−60

図 6.27線形補間フィルタ（U ＝ 2）と平均フィルタ（D ＝ 3）の縦続接続の周
波数振幅応答

−70
0

0.2

0.4

0.6

0.8

1

ω[rad]/π

換に応用する例を紹介しよう．
例題 6.13

フレーム・レート変換

フレーム・レート 30［fps］の映像をフレーム・レート 25［fps］の映像に変換しよう．
解
画素ごとに，U/D = 25/30 = 5/6 の 1 次元のレート変換を施せばよい．利得が U = 5 となり，カッ
トオフ周波数が± π /6 となる近似フィルタが必要となる．例えば，次の近似フィルタを利用できる（例題 6.19，章末問題 6.7 を参照）．

g [ 0 ] = 1, g [ ±1 ] =75
3
1, g[ ± 2 ] = , g[ ± 3 ] = , g[ ± 4 ] =8888

このフィルタを用いると，図 6.28 のようにフレーム・レート変換を実現できる．
図 6.28 では，アップ・サンプリングによって挿入されるゼロ値フレームに対する処理やダウン・
サンプリングによって棄却されるフレームの計算を省略している．これらはポリフェーズ分解と呼ばれる手法である．次節にて詳しく説明する．
また，実際の映像では動きとスペクトラムの関係を理解する必要がある．動き補償の必要性も含めて，適切なフィルタの選択に関する解説については，次章以降で行う．
実習 6.11

フレーム・レート変換

M-file ： practice06̲11.m
128

第6章

画像の拡大・縮小処理

0

1

2

3

4

5

6

7

8

9

10

11

12

30fps

…

7
8

1

5
8

3
8

1
8

1
8

3
8

5
8

7
8

7
8

1

5
8

3
8

1
8

1
8

3
8

5
8

7
8

1

25fps

…

0

図 6.28

1

2

3

4

5

6

7

8

9

10

フレーム・レート変換（30［fps］→ 25［fps］）の例（矢印の添え字は重み付け和の重み係数）

例題 6.13 のフレーム・レート変換を実現してみよう．

6.4

効果的実現法

これまで 1 次元のマルチレート信号処理について概説した．いよいよ画像の拡大縮小処理との関係について解説しよう．また，マルチレート・システムの諸性質を紹介し，レート変換器の効率的な実現を可能とするポリフェーズ構成について説明しよう．
● 分離処理画像は 2 次元信号と解釈できる．水平，垂直の軸に対して，独立に 1 次元のレート変換を施すこと
で，画像の拡大縮小処理，すなわち解像度変換を実現できる．図 6.29 に垂直間引き率 2，水平間引き率 2 のデシメーションの分離処理の概略を示す．拡大処理も同じように，各軸にインターポレーショ
ンを施せばよい．一般に，2 次元の畳み込み演算を実行するよりも，分離処理で実現した方が演算量が少なくなる．
（1）平均操作による縮小処理
例題 6.2 で示した平均操作による縮小処理は，各次元に対して式（6.9）のデシメーション・フィルタを用いた間引き率 2 のデシメーションを施していることと等価である．一見，例題 6.2 では畳み込み
1次元デシメーション

n1

1次元デシメーション

n1

図 6.29垂直間引き率 2，水平間引き率 2 のデシメーションの分離処理
n0

m0

6.4

効果的実現法129

H (z )D＝

H (z D )DF (z )（a）ダウン・サンプラとフィルタ

D0

D1

＝

D

U

＝

F (z U )U（b）アップ・サンプラとフィルタ

U1

U0

＝

U

D ＝D 0 D 1（c）ダウン・サンプラの縦続接続

図 6.30U ＝U 0 U 1（d）アップ・サンプラの縦続接続

レート変換の等価関係

演算が行われていないように感じるが，ブロック分割後の平均操作は以下で紹介するデシメータのポリフェーズ分解による実現と解釈できる．
（2）ゼロ次ホールドによる拡大処理
例題 6.3 で示したゼロ次ホールドによる拡大処理は，各次元に対して式（6.11）のインターポレー
ション・フィルタを用いた補間率 2 のインターポレーションを施していることと等価である．例題
6.3 では畳み込み演算が行われていないように感じるが，各画素をブロックに置き換える操作は以下で紹介するインターポレータのポリフェーズ分解による実現と解釈できる．
● マルチレート・システムの諸性質
マルチレート信号処理システムを実現するに際に有用となるレート変換の等価関係を図 6.30 に示す．特に，図 6.30（a），（b）はノーブル恒等変換（Noble Identity）と呼ばれており，マルチレート・シ
ステムの実現において重要な性質である．
● ポリフェーズ分解
本節では，レート変換器の効率的な実装について解説しよう．デシメーション・フィルタとダウ
ン・サンプラからなるデシメータの基本構成では，ダウン・サンプラによって棄却されるサンプル
も演算の対象となり，むだを生じる．一方，アップ・サンプラとインターポレーション・フィルタからなるインターポレータの基本構成においても，アップ・サンプラによって挿入されたゼロ値に対する演算がむだとなる．これらのむだを省く技術として，ポリフェーズ分解がある．
（1）デシメータのポリフェーズ分解
まず，ポリフェーズ構成によるデシメータの効果的実現について説明しよう．
例題 6.14

デシメータの効果的実現

デシメーション・フィルタのタップ数が 6，間引き率 D = 2 のデシメータをポリフェーズ分解により効果的に実現しよう．
解
図 6.31（a）に，FIR 直接構成でデシメーション・フィルタ H(z )を実現した例を示す．同構成では，
ダウン・サンプラによって間引かれるサンプルまでも演算の対象となる．まず，図 6.31（b）のように，偶数遅延と奇数遅延の係数に分けた構成に等価変換しよう．二つのサブフィルタは z −2 から構成されることが分かる．結果として，図 6.30（a）の等価関係よりダウン・サンプラが各サブフィル
130

第6章

画像の拡大・縮小処理

h [0]
z −1

h [1]

z −1

h [2]

z −1

h [3]

z
z

−1

−1

h [4]
h [5]

h [0]
z −2
＋

z −1
＋

z −2

＋
＋

h [4]

z −2

2

h [3]
h [5]

z −1

h [2]

z −1

h [4]

＋

z −1
＋

h [1]

＋

（a）FIR直接構成

図 6.31

z −2

h [2]

h [0]

2

z −1

h [3]

z −1

h [5]

＋
＋

＋

h [1]

2

＋

＋

2

（b）偶数遅延と奇数遅延の係数に分けた構成＋＋＋（c）効果的構成

デシメータのポリフェーズ構成

タ E0 (z)，E1 (z)の左へ動き，フィルタ処理の前にあらかじめサンプルが棄却され，むだが省かれる．
各サブフィルタ E0 (z )，E1 (z )はタイプⅠのポリフェーズ・フィルタと呼ばれる．より一般的に，タイプ I のポリフェーズ分解は
D−1

H(z) = ∑ Ed (z D )z− dd =0と表現される．ただし，∞

Ed ( z) = ∑ h [ Dm + d ]z − mm =−∞図 6.32 に一般的な間引き率 D のデシメータのポリフェーズ構成を示す．なお，遅延列とダウン・
サンプラからなる構成部は，D サンプルごとのシリアル-パラレル（S/P）変換器となっている．
（2）インターポレータのポリフェーズ分解
次に，ポリフェーズ分解によるインターポレータの効果的実現について説明しよう．
例題 6.15

インターポレータの効果的実現

インターポレーション・フィルタのタップ数が 6，補間率 U = 2 のインターポレータをポリD

E 0 (z )D

E 1 (z )

＋

⁝

⁝

⁝

D

ED −1 ( z )

＋

z −1
⁝

z −1

図 6.32タイプⅠのポリフェーズ分解

シリアル-パラレル変換

6.4

効果的実現法131

f [5]

2

f [4]

f [3]

f [2]

f [1]

f [0]

2

z −1
＋

f [1]

＋
−1

z −1

f [2]

＋

z

R 0 ( z 2)
z −2
＋

−1

f [0]

＋

f [1]

＋

R 1 ( z 2)
z −2

z −1

＋

z

−2

＋

f [5]

f [3]

z −2

f [4]

＋

（a）FIR反転構成

図 6.33

f [3]

z −1

z

f [5]

＋

（b）偶数遅延と奇数遅延の係数を分けた構成

R0 ( z )
z −1
＋

z −1
＋

f [4]

f [2]

f [0]

2

R1 ( z )
z −1

z −1

＋

z −1
＋

2

＋

（c）効果的構成

インターポレータのポリフェーズ構成

フェーズ分解により効果的に実現しよう．
解
図 6.33（a）に，インターポレーション・フィルタ F(z)を FIR 反転構成で実現した例を示す．同構
成では，アップ・サンプラによって挿入されたゼロ値サンプルまでも演算の対象となる．まず，
図 6.33（b）のように，偶数遅延と奇数遅延の係数に分けた構成に等価変換しよう．二つのサブフィ
ルタは z −2 から構成されることが分かる．結果として，図 6.30（b）の等価関係よりアップ・サンプ
ラが各サブフィルタ R0 (z)，R1 (z)の右へ動き，ゼロ値に対するフィルタ処理が省略される．
各サブフィルタ R0 (z)，R1 (z)はタイプⅡのポリフェーズ・フィルタと呼ばれる．より一般的に，タ
イプⅡのポリフェーズ分解は，
U −1

F( z) = ∑ Ru (zU )z −(U −1−u)u =0と表現される．ただし，∞

Ru (z) = ∑ f [U (m + 1) − 1 − u ]z − mm =−∞図 6.34 に一般的な補間率 U のインターポレータのポリフェーズ構成を示す．なお，アップ・サン
プラと遅延列からなる構成部は，U サンプルごとのパラレル-シリアル（P/S）変換器となっている．
（3）有理数倍率レート変換器のポリフェーズ分解
U と D が互いに素である場合，図 6.35 に示すようにアップ・サンプラとダウン・サンプラの順序を交換できる．有理数倍率のレート変換器についても，先に示したポリフェーズ分解と図 6.35 の性質を利用することで，効果的な実現が可能となる．
132

第6章

画像の拡大・縮小処理

R0 (z )

U

U

U

⁝

⁝

RU −1 ( z )

U

⁝

D

＝

U

図 6.35 アップ・サンプラとダウン・サンプラの交換

z −1
R1 (z )

D

＋
⁝

z −1
＋

パラレル-シリアル変換

図 6.34タイプⅡのポリフェーズ構成

例題 6.16

有理数比レート変換の効果的実現

フィルタのタップ数が 6，補間率 U = 2，間引き率 D = 3 の有理数比レート変換器のポリフェー
ズ構成を導出しよう．
解
図 6.36（a）は，図 6.36
（b）を経て図 6.36
（c）
を得る．

6.5

レート変換フィルタ設計

ここでは，レート変換フィルタの設計に有効な固有フィルタ設計法を紹介しよう．固有フィルタ
設計法は周波数領域の設計仕様に加えて，時間領域の制約を課すことが容易なことが知られている．
なお，レート変換フィルタの近似を得るためには，窓関数設計法，線形計画法，チェビシェフ・
フィルタなどの一般的なフィルタ設計法が利用できる．これについては，『シミュレーションで学ぶ
ディジタル信号処理』（CQ 出版社 刊）
を参照していただきたい．
● 固有フィルタ設計
固有フィルタ設計（Eigenfilter Design）法は FIR フィルタ最適化設計手法の一種で，周波数領域の理想応答との自乗誤差を目的関数としている．時間領域の制約を与えやすいという利点を持つため，後述するようにナイキスト・フィルタ設計に利用できる．
（1）線形位相低域通過固有フィルタ
線形位相 FIR 低域通過フィルタ g[l ]を考えよう．この伝達関数は G (z) = ∑ l=0 g [l ] z−lと表現され，
N

g [l] = g [N − l ]を満たす．さらに，フィルタ次数 N が偶数であるとすると．G(z)の周波数振幅応答は，
N /2

GR (ω ) = G(e jω ) = ∑ bn cos ω n = bT c (ω ) ……………………………………………………………（6.14）
n =0と与えられる．ただし，
0

2

1

2

2

2

1

………………………………………………………………（6.15）

6.5

レート変換フィルタ設計133

g [0]

2

z −1

g [1]

z −1

g [2]

z −1

g [3]

z −1

g [4]

z −1

g [5]

g [1]

z ＋1
z −1

g [3]

＋

z −1

g [5]

＋

＋

2

z −3

g [0]

＋
＋
＋

＋

3

z −1

g [2]

z −1

g [4]

（a）FIR構成

3
＋
＋

2

3

＋

（b）導出1

z ＋1

3

z −1
3

z −1
3
3

z −1
3

z −1
3

g [1]
g [3]
g [5]

＋
＋

2

g [0]
g [2]
g [4]

z −1
＋
＋

2

＋

（c）導出2

図 6.36 有理数比レート変換のポリフェーズ構成c(ω ) = ⎛⎝1 cos ω… cos N2ω ⎞⎠T…………………………………………………………………（6.16）

である．
通過域の誤差エネルギ EP と阻止域の誤差エネルギ ES は，それぞれEP = ∫

ωP

GR(0) − G (e jω )2 dωπ= bT (1 − c (ω ))(1 − c (ω )) T b = b T Qb ……………………………………………………………（6.17）

ES = ∫0πGR(e jω )2 dωπ= b c (ω ) c (ω ) b = b T Pb …………………………………………………………………………（6.18）
ωS
T

Tと与えられる．ただし，1 は要素がすべて 1 の(N/2 + 1)次元ベクトルであり，Q，P は(N/2 + 1) × (N/2
+ 1)行列である．それぞれの(m, n)番目要素 qm, n と pm, n は，通過域端 ωP と阻止域端 ωS から

q m, n = ∫
134

第6章

ωP
0

( 1 − cos mω ) ( 1 − cos nω )画像の拡大・縮小処理dω……………………………………………………………（6.19）ππp m, n = ∫ cos mω cos nω
ωS

dω
π

………………………………………………………………………（6.20）と与えられる．
固有フィルタ設計法では目的関数φを

φ = α ES + (1 − α ) E P = b T Rb …………………………………………………………………………（6.21）と定義する．ただし，α は通過域と阻止域の重みを制御するパラメータで，0 < α < 1 である．また，

R = α P + (1 − α ) Q ……………………………………………………………………………………（6.22）
である．
R は，実で対称な正定値行列であり， φ を最小化する単位ノルム・ベクトル b が，R の最小の固有値に対応する固有ベクトルとして与えられ，べき乗法（power method）
を用いて計算できる．
● デシメーション・フィルタ
早速，固有フィルタ設計によるデシメーション・フィルタを設計してみよう．
例題 6.17

デシメーション・フィルタの設計

間引き率 D = 2 のデシメーション・フィルタを固有フィルタ設計法により設計し，インパルス応
答と周波数振幅応答を見てみよう．ただし，• 通過域端： ωP = π/D × (1 − 0.2)
• 阻止域端： ωS = π/D × (1 + 0.2)
• 誤差エネルギ評価の重み： α = 0.5• フィルタの次数： N = 30とする．
解
図 6.37 に MATLAB による設計例を示す．図 6.21 に示す平均フィルタの周波数振幅応答と比べてみよう．なお，固有フィルタ設計を実装した eigLpFir 関数を用意したので参照していただきたい．
dFactor = 2; % 間引き率（正整数）
pass = 1/dFactor*(1-0.2); % 通過域端
stop = 1/dFactor*(1+0.2); % 阻止域端
alpha = 0.5; % 重みパラメータ
nOrder = 30; % フィルタ次数% 固有フィルタ設計
h = eigLpFir(nOrder,pass,stop,alpha);
実習 6.12

デシメーション・フィルタの設計

M-file ： practice06̲12.m
6.5

レート変換フィルタ設計

135

0.6

20
10

0.5

0
｜H ( e jω )｜[dB]

振幅

0.4
0.3
0.2
0.1

−20
−30
−40
−50
−60

0
−0.1

−10

−70
0

5

−80

n [サンプル]

0.4
0.6
ω[rad]/π（a）インパルス応答（b）周波数振幅応答

10

15

20

25

30

0

0.2

0.8

1

図 6.37 固有フィルタ設計法による間引き率 2 のデシメーション・フィルタの設計例

各種パラメータを変えてフィルタを設計してみよう．
（1）その他のフィルタ設計法
MATLAB では，デシメーションを行う関数として decimate が用意されており，デフォルトでタ
イプ I のチェビシェフ・フィルタ（cheby1 関数）が適用される．関数 decimate で FIR をオプション指
定すると，Hamming 窓を用いた FIR フィルタ窓関数法による設計（fir1 関数）が適用される．
● インターポレーション・フィルタ
インターポレーション・フィルタの理想特性を式（6.10）に示したが，さらに時間領域における制約として，オリジナルのサンプル値を保持するナイキスト・フィルタが望ましい．以下で解説しよう．
（1）ナイキスト・フィルタ
補間率 M のインターポレーションを考えよう．もし，インターポレーション・フィルタのインパルス応答が，ある k（0 ≤ k ≤ M − 1）に対して

⎧ 1 n = nk
f [ Mn + k ] = ⎨………………………………………………………………………………（6.23）⎩ 0 n ≠ nkという条件を満たす任意の整数 nk を持つ場合，補間前のオリジナルのサンプル値が補間後もその値を保つ．k = 0 に対して nk = 0 の場合が単純で理解しやすい．インパルス応答が時刻 0 で 1 となり，
M の整数倍の時刻では 0 となることを意味する．このようなフィルタを M-th バンド・フィルタあ
るいはナイキスト（M ）フィルタと呼ぶ．
（2）固有フィルタ設計
固有フィルタ設計法は時間領域の制約を与えやすい．式（6.23）のナイキスト（M）フィルタの条件も例外ではない．実際に，式（6.23）
の制約を
136

第6章

画像の拡大・縮小処理

1
0
0 その他

…………………………………………………………………………………（6.24）のように bn に課すことで設計できる．具体的には，bn = 0 となる要素を取り除いて得られるベクトルb̂と対応する列ベクトル，行ベクトルを取り除いた行列 R̂を新たに定義し，b̂TR̂b̂を bTb = 1 の制約のもとで目的関数を最小化すればよい．
例題 6.18

インターポレーション・フィルタの設計

補間率 U = 2 のインターポレーション・フィルタ（ナイキスト（2）フィルタ）を固有フィルタ設計
法により設計し，インパルス応答と周波数振幅応答を見てみよう．ただし，以下のとおりとする．

• 通過域端： ω P = π /U × (1 − 0.2)
• 阻止域端： ω S = π /U × (1 + 0.2)
• 誤差エネルギ評価の重み： α = 0.5• フィルタの次数： N = 30解
図 6.38 に MATLAB による設計例を示す．図 6.24 に示す線形補間フィルタの周波数振幅応答と比べてみよう．なお，ナイキスト・フィルタ設計を実装した eigLpNqFir 関数を用意したので参照してほしい．
uFactor = 2; % 補間率（正整数）
pass = 1/uFactor*(1-0.2); % 通過域端
stop = 1/uFactor*(1+0.2); % 阻止域端
alpha = 0.5; % 重みパラメータ
nOrder = 30; % フィルタ次数% 固有フィルタ設計
f = uFactor * eigLpNqFir(...
nOrder,pass,stop,alpha,uFactor);
実習 6.13

インターポレーション・フィルタの設計

M-file ： practice06̲13.m
各種パラメータを変えてフィルタを設計してみよう．
（3）その他のフィルタ設計法
MATLAB では，インターポレーション関数として interp が用意されており，デフォルトで FIRの最小自乗誤差設計（firls 関数）
によるナイキスト・フィルタ（intfilt 関数）が適用される．
● 有理数比レート変換フィルタ
固有フィルタ設計による有理数比レート変換フィルタを設計してみよう．
6.5

レート変換フィルタ設計

137

1.2

20

1

10
0

｜F ( e jω )｜[dB]

0.8

振幅

0.6
0.4
0.2

−20
−30
−40
−50

0
−0.2

−10

−60
−70
0

5

n [サンプル]

0.4
0.6
ω[rad]/π（a）インパルス応答（b）周波数振幅応答

10

15

20

25

30

0

0.2

0.8

1

図 6.38 固有フィルタ設計法による補間率 2 のインターポレーション・フィルタの設計例

例題 6.19

有理数比レート変換器の設計

レート変換比 U/D = 5/6 のレート変換フィルタを固有フィルタ設計法により設計し，インパルス
応答と周波数振幅応答を見てみよう．ただし，以下のとおりとする．

• 通過域端： ω P = min(π /U, π /D) × (1 − 1)
• 阻止域端： ω S = min(π /U, π /D) × (1 + 1)
• 誤差エネルギ評価の重み： α = 0.5• フィルタ次数： N = 8
解
図 6.39 に MATLAB による設計例を示す．
uFactor = 5; % 補間率
dFactor = 6; % 間引き率
sFactor = max(uFactor,dFactor);pass = 1/sFactor * (1 - 1); % 通過域端
stop = 1/sFactor * (1 + 1); % 阻止域端
alpha = 0.5; % 重みパラメータ
nOrder = 8; % フィルタ次数% 固有フィルタ設計
g = uFactor * eigLpNqFir(...
nOrder,pass,stop,alpha,uFactor*dFactor);
有理数比のレート変換の場合，オリジナルの標本値を残すためには M = U × D としてナイキスト
（M）
138

第6章

画像の拡大・縮小処理

1
30

0.8

20

0.7

10

｜G ( e jω )｜[dB]

0.9

振幅

0.6
0.5
0.4
0.3

0
−10
−20
−30

0.2

−40

0.1

−50

0

−60
0

1

2

3

4

5

6

7

8

n [サンプル]0（a）インパルス応答

図 6.39

0.2

0.4
0.6
ω[rad]/π（b）周波数振幅応答

0.81

固有フィルタ設計法による U ＝ 5，D ＝ 6 の有理数比レート変換

フィルタを設計すればよい．
実習 6.14

有理数比レート変換フィルタの設計

M-file ： practice06̲14.m
各種パラメータを変えてフィルタを設計してみよう．
（1）その他のフィルタ設計法
MATLAB では，有理数比レート変換関数 upfirdn 関数が既に用意されている．また，フィルタの自動設計機能のついた resample 関数も用意されている．resample 関数では，デフォルトで FIRフィルタの最小自乗誤差設計（firls 関数）によるフィルタが適用される．なお，upfirdn は後述する
ポリフェーズ構成によって実現されている．Image Processing Toolbox がある場合，imresize 関数
で直接画像の拡大縮小処理を実行できる．詳細はマニュアルを参照していただきたい．
（2）境界処理
レート変換にはフィルタリングが伴うため，画像に適用する場合，空間の境界部においてゼロ値
拡張や対称拡張などの対処が必要となることに注意されたい．

章末問題
問題 6.1

画像縮小の分離処理（MATLAB 演習）

解像度を垂直 1/2，水平 1/2 にする画像の縮小を分離処理で行う解像度変換器を設計してみよう．
decimate 関数を用いてもよい．また，各種パラメータを変えながら比較・検討してみよう．

6.5

レート変換フィルタ設計139

問題 6.2

画像拡大の分離処理（MATLAB 演習）

解像度を垂直 2 倍，水平 2 倍にする画像の拡大を分離処理で行う解像度変換器を設計してみよう．
interp 関数を用いてもよい．また，各種パラメータを変えながら比較・検討してみよう．
問題 6.3

ゼロ次ホールド処理（MATLAB 演習）式（6.11）の 1 次元ゼロ次ホールド・フィルタの周波数振幅応答を見てみよう．
問題 6.4

有理数比解像度変換の分離処理（MATLAB 演習）

垂直 1080 ×水平 1920 の解像度を持つ画像から垂直 480 ×水平 720 の解像度を持つ画像を得るための解像度変換器を設計してみよう．また，この逆の変換器も設計してみよう．
問題 6.5

フレーム・レート変換（MATLAB 演習）

例題 6.13 のフィルタ g [l]の周波数振幅特性を調べてみよう．また，フレーム・レート変換が図 6.28のように実現できることを確かめてみよう．
問題 6.6DVD Audio → CD Audio レート変換器（MATLAB 演習）

96.0kHz で標本化された DVD Audio 信号を標本化周波数 44.0kHz の信号に変換するレート変換器を設計しよう．なお，実際の CD Audio 信号の標本化周波数は 44.1kHz である．しかし，このレート変換を用いても約 0.2 ％の誤差で収まる．具体的には，44.0kHz で標本化されている 3 分の曲を 44.1kHzで再生したとしても，再生時間が約 0.4 秒だけ速くなるに過ぎない．
問題 6.7

フレーム・レート変換フィルタ（1）（MATLAB 演習）

例題 6.19 で設計したフィルタ係数に 8 を掛け，四捨五入により整数化し，再度 8 で割ると，例題
6.13 のフィルタ g [l]が得られることを確かめてみよう．
問題 6.8

フレーム・レート変換フィルタ（2）（MATLAB 演習）

フレーム・レート 25［fps］の映像を 30［fps］の映像に変換するフィルタを設計してみよう．
参考文献（1）P.P. Vaidyanathan ； Multirate Systems and Filter Banks，Prentice Hall，1993．
（2）貴家仁志；マルチレート信号処理，昭晃堂，1995 年．
（3）貴家仁志；よくわかるディジタル画像処理，CQ 出版社，1996 年．
（4）尾知 博；シミュレーションで学ぶディジタル信号処理，CQ 出版社，2001 年．

140

第6章

画像の拡大・縮小処理

第7章

DCT とウェーブレット変換

本章では，画像・映像符号化に欠かせないツールとなった離散コサイン変換（DCT ： Discrete
Cosine Transform）と離散時間ウェーブレット変換（DWT ： Discrete-time Wavelet Transform）について解説しよう．DCT や DWT に代表される変換技術は，マルチメディア信号処理のほか，TDM（Time Division Multiplexing）-FDM（Frequency Division Multiplexing）
変換器や OFDM（Orthogonal
Frequency Division Multiplex）などの通信用信号処理にも必要不可欠な要素技術となっている．これら変換技術を使いこなせるように，行列演算とフィルタリングという二つの視点をもって説明を
進めよう．

7.1

信号変換の必要性

DCT や DWT の詳細について説明する前に，信号変換が必要とされる理由について具体例を挙げながら概説しよう．
● まずは試してみよう
まずは，1 次元信号の変換から復習しよう．既に第 2 章で解説した離散フーリエ変換（DFT）も信号変換の一種である．DCT の結果と比べてみよう．
例題 7.1DFT と DCT

次の 16 点の信号 x[n]の 16 点 DFT と 16 点 DCT の結果を比較してみよう．

ππx[n] = 2 cos ⎛⎝ n⎞⎠ + cos ⎛⎝ n⎞⎠ , 0 ≤ n < 1684解以下に，MATLAB による処理例を示す．
% 原信号 x[n] の生成
7.1

信号変換の必要性

141n=0:15;x(n+1)= 2*cos(pi/8*n) + cos(pi/4*n);% 原信号 x[n] の表示
figure(1);stem(n,x);
xlabel('n'); ylabel('x[n]');title('Original sequence');% DFT の計算と結果表示
ydft = fft(x);figure(2);stem(n,abs(ydft));xlabel('k'); ylabel('Y_{DFT}[k]');title('DFT (Magnitude)');% DCT の計算と結果表示
ydct = dct(x);figure(3);stem(n,ydct);xlabel('k'); ylabel('Y_{DCT}[k]');title('DCT');
図 7.1 に原信号とその DFT および DCT の結果を示す．
いま，図 7.1（ a）の原信号 x [n] が二つの余弦波から構成されていることをあらかじめ知っている．
しかし，図 7.1（a）の波形を見ただけで，この事実に気がつくだろうか？ 図 7.1（b）に示す DFT は，
x [n] が大きさの異なる周波数の低い二つの余弦波（あるいは正弦波）から構成されることを明確に見せている．このように，一見複雑な信号も変換によって特徴が明確になることがある．
また，図 7.1（c）に示す DCT も，DFT の左半分の係数（0 ≦ k ＜ 8）に類似した結果を与えることに気づくだろう．DFT は，原信号が実数であっても複素数の係数を与える．一方，DCT は，原信号が実数であれば，係数もまた実数となる．周波数解析の能力に加え，実数の結果を与えるという点は，DCT が多くの支持を受けている一つの理由である．DFT と DCT の関係については，後ほど詳しく解説しよう．
実習 7.1DFT と DCT

M-file ： practie07̲1.m
原信号 x [n]を変えて DFT と DCT の結果を比較してみよう．特に，次の 16 点の信号

142

第7章

DCT とウェーブレット変換

3

16

2.5

14

2

12

yDFT [ k ]x [n ]

1.5
1
0.5
0

10
8
6

−0.5

4

−1

2

−1.5

0

5

10

n

0

15

0

（a）原信号

5

10

k

15

（b）DFTの結果

6
5

yDCT [ k ]

4
3
2
1
0
−0

0

5

k

10

15

（c）DCTの結果

図 7.1 DFT と DCTππππx[n] = 2 cos⎛⎝ n + ⎞⎠ + cos⎛⎝ n + ⎞⎠ , 0 ≤ n < 16816
4
8
ではどのようになるか？
● 画素間の相関と変換
画像信号の隣接する画素の間には強い相関があるといわれている．画像や映像の圧縮技術では，
このような相関をたくみに利用して画質を保ちつつ，データ容量を削減している．
画像の隣接する画素をペアにして図 7.2（a）に示すように 2 次元のベクトルを構成し，これらを直交平面上にプロットすると，図 7.2（ b）に示すような散布図が得られる．すなわち，45 度の対角上にデータが集中するような散布図である．これは，x0 と x1 の間の関係（相関）が強く，x0 が与えられるとx1 が予測しやすいことを意味している．予測のしやすさはむだな情報が含まれることを意味する．
ベクトル x = (x0, x1)T に，
7.1

信号変換の必要性

143

X＝

( )
x0
x1

x1

x0 x1

y1

y0

相関が減る

y1

（a）原画像

y0

広がり
広がり
広がり

x0
（b）変換前の散布図（c）変換後の散布図

図 7.2 画素間の相関と変換⎛⎛ π⎞⎛ y0 ⎞ ⎜ cos ⎝ − 4 ⎠⎟ =⎜⎝ y1 ⎠ ⎜ sin ⎛ − π ⎞
⎝ 4⎠
⎝

⎜

π ⎞
− sin ⎛⎝ − ⎞⎠ ⎟ ⎛ x0 ⎞4 ⎜ ⎟ = 1 ⎛⎜ 1 1⎞⎟ ⎛⎜ x0 ⎞⎟…………………………………………
（7.1）
π ⎞ ⎟⎟ ⎝ x1 ⎠2 ⎝ −1 1⎠ ⎝ x1 ⎠⎛cos ⎝ − ⎠4 ⎠という変換を施してみよう．すると，ベクトル y = (y0, y1)T の散布図は，図 7.2（c）のように図 7.2（b）
を− 45 度回転させたものとして与えられる．y0 は x0 や x1 の 1.4 倍程度広がるが，y1 の広がりは小さくなる．また，y0 と y1 の相関が減り，一方から他方を予測することが難しくなる．むだな情報が省かれ，重要な情報が y0 に集中することを意味する．
例題 7.2

散布図と信号変換

図 7.3（a）の画像について，水平方向に画素のペアを組んで 2 次元ベクトルを構成し，その散布図を描いてみよう．また，式（7.1）の変換を施した後の散布図も描いてみよう．
解
MATLAB のコマンド例を以下に示す．pictureGray はモノクロ画像のワークスペース上の参
照とする．

150

250

100

200

50

x1

y1

150
100

−50

50

−100

（a）原画像00

50 100 150 200 250 300x0（b）変換前の散布図

図 7.3

144

画素間の相関と変換

第7章

DCT とウェーブレット変換

0

−150
0

50 100 150 200 250 300y0（c）変換後の散布図

% 2 次元ベクトル集合の抽出
nPixels = prod(size(pictureGray));
setOfX = ...
reshape(pictureGray.', 2, nPixels/2);% 変換前の散布図
figure(1);scatter(setOfX(1,:),setOfX(2,:),'.');
axis square;xlabel('x_0'); ylabel('x_1');
title('Scatter plot (before transform)');% 信号変換setOfY = 1 / sqrt(2) * [ 1 1 ; -1 1 ] ...
* double(setOfX);% 変換後の散布図
figure(2);scatter(setOfY(1,:),setOfY(2,:),'.');
axis square;xlabel('y_0'); ylabel('y_1');
title('Scatter plot (after transform)');
図 7.3（b），（c）に変換前と変換後の散布図をそれぞれ示す．図 7.3（b），（c）より，信号変換は，周波数解析のほかにも，統計的な性質（相関）を変えるという重要な機能をもつことが分かる．
実習 7.2

散布図と信号変換

M-file ： practice07̲2.m
ほかの画像についても試してみよう．

7.2

信号変換の基礎

信号変換の基本は行列演算である．ここでは行列演算の意味について，数学的に厳密な議論は避けて，直感的な解説を行いたいと思う．線形代数を学習したことのある読者は，簡単な復習と思って読み進めていただきたい．
● 変換の種類
M 点の信号 x[n]，n = 0，1，2，…，M − 1 を考えよう．M × M 行列 A を使った x[n]の変換は，7.2

信号変換の基礎145⎛ y[ 0 ] ⎞ ⎛ a 0, 0 a 0,1  a 0, M −1 ⎞ ⎛ x[ 0 ] ⎞⎟⎟⎜⎜ y[1] ⎟ ⎜ a⎟ = ⎜ 1, 0 a 1,1  a 1, M −1 ⎟ ⎜ x[1] ⎟
⎜
⎟
⎟⎜
 

⎜
 ⎟ ⎜ 

⎟
⎜
⎟ ⎜
⎟⎜
⎝ y[ M − 1]⎠ ⎝ aM −1, 0 aM −1,1  aM −1, M −1⎠ ⎝ x[ M − 1]⎠  y………………………………………………
（7.2）

x

A

もしくは，
M −1

y[k] = ∑ a k, n x[n], k = 0, 1, , M − 1 …………………………………………………………………（7.3）
n =0と表現される．ただし，ak, n は行列 A の k 行 n 列目の要素とする．y[k]は変換係数と呼ばれる．
（1）逆変換もし，A に逆行列が存在する場合，すなわち行列式 detA が非ゼロ（非特異）の場合，逆行列 A−1 が存在し，

x = A−1y………………………………………………………………………………………………
（7.4）のように変換係数ベクトル y から x を再構成可能である．
（2）ユニタリ変換
もし，複素共役転置 A†が逆行列の定数倍，すなわち A† = cA−1 ならば，=

1 †………………………………………………………………………………………………
（7.5）のように変換係数ベクトル y から x を再構成可能である．このような行列をユニタリ行列と呼ぶ．また，ユニタリ行列による変換をユニタリ変換とよぶ．複素共役転置の例を以下に示そう．
†

1
1

2

2

1

1
2

2

……………………………………………………………………
（7.6）

ただし，j は虚数単位である．
kn

DFT 行列はユニタリ行列の一種であり， a k, n = WM = e
†

1

−j

2π
kn
M
と定義され，……………………………………………………………………………………
（7.7）

が成立する．ただし，I は単位行列である．
（3）直交変換
行列 A が実数かつユニタリ行列ならば，転置行列 AT が逆行列の定数倍 cA−1 となり，

x=

1 T
A y ………………………………………………………………………………………………（7.8）
cのように変換係数ベクトル y から x を再構成可能できる．このような行列を直交行列と呼ぶ．特に，
c = 1 の場合，正規直交行列と呼ぶ．また，直交行列による変換を直交変換と呼ぶ．
式（7.1）の変換行列は正規直交行列であり，AT A = A−1A = I ………………………………………………………………………………………（7.9）
が成立する．

146

第7章

DCT とウェーブレット変換

例題 7.3

正規直交変換次の行列 A が正規直交行列であることを確かめてみよう．

⎛ cosθ − sin θ ⎞A=⎜⎟⎝ sin θ cosθ ⎠解ATA = I が証明できればよい．数学的な証明については読者自身にお任せすることにして，以下では MATLAB 上での確認の例を示そう．
theta = pi/3; % 角度θ [rad]A = [ cos(theta) -sin(theta) ; % 変換行列
sin(theta) cos(theta) ];A.'*A% A^T * A の実行

角度 theta を変えても結果は常に単位行列となる．
● 基底ベクトルと基底画像（1）基底ベクトル
逆行列

A−1 = ( b0 b1  b M −1) ………………………………………………………………………………（7.10）の各列ベクトル bk は基底ベクトルと呼ばれる．信号ベクトル x は，これら基底ベクトル bk の線形結合

x = y [ 0 ]b0 + y [1]b1 +  + y [ M − 1]bM −1 ……………………………………………………………（7.11）のように展開でき，重みは変換係数 y [ k ]となる．
例題 7.4

基底ベクトルベクトル x = (√￣
2 , 2 √￣2 )T を行列

A−1 =1 ⎛ 1 1⎞2 ⎜⎝ −1 1 ⎟⎠−1=

1 ⎛ 1 −1 ⎞2 ⎜⎝ 1 1 ⎟⎠の列ベクトルの線形結合で表せることを確かめよう．
解
数式上の確認については読者自身にお任せすることにして，以下では MATLAB 上での確認の例を示そう．
x = sqrt(2)*[ 1 2 ].';% ベクトル x の定義

A = [ 1 1 ; -1 1 ]/sqrt(2); % 変換行列
y = A * x;

% 変換係数の計算
7.2

信号変換の基礎147

x [1]
y [1]

y [0]

2√￣
2

3

b1

b0

1

2
√￣

0

x [0]

図 7.4
信号変換と基底ベクトル

invA = inv(A);% 変換行列の逆行列b0 = invA(:,1);% 基底ベクトル b0

b1 = invA(:,2);% 基底ベクトル b1y(1)*b0 + y(2)*b1 % 基底ベクトルの線形結合
ベクトル x が再構成される（図 7.4 を参照）．
（2）基底画像
1 次元の信号変換と同じように，画像のような 2 次元の信号変換も定義できる．順変換と逆変換はそれぞれ，
M1 −1 M0 −1

y[k0, k 1 ] = ∑ ∑ a k , k , n , n x[ n 0, n1] ………………………………………………………………（7.12）0

n1 =0 n0 =0

1

0

1

M1 −1 M0 −1

x[ n 0, n1 ] = ∑ ∑ b n , n , k , k y[k0,k 1 ] ………………………………………………………………（7.13）
0

1

0

1

k1 =0 k0 =0と表現される．配列

b0,1, k , k  b0, M −1,k ,k ⎞⎛ b0, 0, k , k⎜ b1, 0,k ,kb1,1,k , k  b1, M −1, k , k ⎟⎟ ………………………………………………（7.14）
Bk , k = ⎜




⎜
⎟
⎜b
⎟
⎝ M −1, 0, k , k b M −1,1, k , k  b M −1, M −1, kk , k ⎠
0

0

1

0

1

1

0

1

0

1

0

1

1

0

1

1

0

0

1

0

0

1

0

1

0

1

は基底ベクトルに代わり，基底画像と呼ばれる．変換前の画像配列を X とすると，X はこれら基底画

像 B k 0, k 1 の線形結合

X = y [ 0, 0 ] B 0, 0 + y [ 0, 1] B 0,1 +  + y [ M0 − 1, M1 − 1] BM −1, M −1 ……………………………………（7.15）
01のように展開でき，重みは変換係数 y[k 0, k 1]となる．
例題 7.5

基底画像

図 7.5（a）の画像配列 X を図 7.5（b）に示す基底画像 Bk 0, k 1 の線形結合で表せることを確かめよう．
148

第7章

DCT とウェーブレット変換

B0,1

B0,0

0

2

4

6

1/2

1/2

1/2

1/2

6×

1/2

−1/2

1/2

2×

B1,0

B1,1

−1/2 −1/2X（a）原配列

−1/2

4×
1/2

図 7.5
画像配列の展開

1/2

−1/2

−1/2

1/2

0×
1/2

（b）基底画像と係数

解
数式上の確認については読者自身にお任せすることにして，以下では MATLAB 上での確認の例を示そう．
B00 = [ 1 1 ; 1 1 ]/2;

% 基底画像 B00

B01 = [ -1 1 ; -1 1 ]/2; % 基底画像 B01
B10 = [ -1 -1 ; 1 1 ]/2; % 基底画像 B10
B11 = [ 1 -1 ; -1 1 ]/2; % 基底画像 B11
6*B00 + 2*B01 + 4*B10 + 0*B11 % 線形結合
配列 X が再構成される．
図 7.5（a）の画像配列を図 7.5（b）のように展開する方法については，以下で解説しよう．
● 分離処理2 次元の信号変換を各軸に独立な 1 次元の信号変換で実行する方法を，2 次元信号変換の分離処理という．分離処理による 2 次元信号の順変換と逆変換はそれぞれ，

Y = A0XA1T ……………………………………………………………………………………………（7.16）

X = A0−1YA1−T …………………………………………………………………………………………（7.17）と表現される．ただし，Y は，k 0 行 k 1 列目に y[k 0, k 1]を要素としてもつ係数配列であり，Ad は各軸の信号変換を行う任意の非特異行列である．
分離処理の基底画像 Bk 0, k 1 は，

B k , k = b 0, k ⊗ b 1T, k
0

1

0

1

…………………………………………………………………………………
（7.18）と与えられる．ただし，b d, k は，行列 A −1
（MATLABd の k 番目の列ベクトルであり，⊗ はテンソル積では kron 関数）を表す．

7.2

信号変換の基礎149

例題 7.6

分離処理の基底画像

A0 = A1 =1  1 1
2  −1 1

と選択したときの基底画像を求めてみよう．
解
数式上の確認については読者自身にお任せすることにして，以下では MATLAB 上での確認の例を示そう．
A = [ 1 1 ; -1 1 ]/sqrt(2); % 変換行列
invA = inv(A);% 逆行列（転置も可）b0 = invA(:,1); % 基底ベクトル b0
b1 = invA(:,2); % 基底ベクトル b1
B00 = kron(b0,b0.') % 基底画像 B00
B01 = kron(b0,b1.') % 基底画像 B01
B10 = kron(b1,b0.') % 基底画像 B10
B11 = kron(b1,b1.') % 基底画像 B11
図 7.5（b）に示す基底画像が与えられる．なお，行列 A は直交行列なので，逆行列を求める際には単なる転置でもよい．
実習 7.3

分離処理の基底画像

M-file ： practice07̲3.m
式（7.16）によって，図 7.5（b）に示す線形結合の重み（変換係数）y [k 0, k 1]が与えられることを確かめてみよう．
● 変換符号化
信号変換の重要な応用に変換符号化がある．変換符号化は，静止画像符号化国際標準方式 JPEG や
JPEG2000 に採用されるなど，今日のマルチメディア技術を支えている．
変換符号化はおおむね図 7.6 に示される構成をとる．上段が符号化部，下段が復号部を表している．
前処理の部分では，色空間変換やレベル・シフト，ブロック分割などが行われる．順変換では，2 次元の信号変換が施される．例えば JPEG の場合，サイズ 8 × 8 のブロックに分割された後，それぞれのブロックに対して 8 × 8 の 2 次元 DCT が施される．量子化部では，変換係数ごとに異なる量子化が施される．ハフマン符号化や算術符号化などのエントロピ符号化が続き，係数間やブロック間に残る冗長性が取り除かれる．復号側では符号化と逆の手続きが取られる．

150

第7章

DCT とウェーブレット変換

入力
前処理

順変換

エントロピ
符号化

量子化

伝送路
後処理

図 7.6
変換符号化の概略図

逆変換

エントロピ
復号

逆量子化

再構成

2

2

3

1

2

2

3

1

2

2

3

1

1

2

2

2

3

1

3

3

2

0

2

4

3

3

1

1

1

1

0

2

1

1

1

1

（a）画像配列（b）量子化テーブルQ（c）再構成画像

図 7.7 変換符号化の例

例題 7.7

変換符号化

図 7.7（a）に示す 4 × 4 の画像配列をサイズ 2 × 2 のブロックに分割して，次のことを試してみよう．ただし，[・]k 0, k 1 は配列の k 0 行 k 1 列目の要素を意味する．

1．例題 7.6 の 2 次元変換を施し，その結果として得られる変換係数配列 Y を求めてみよう．

2．図 7.7（b）の量子化テーブル Q を用いて，各係数に対する線形量子化を施してみよう．ただし，
小数点以下第 1 位を切り捨てて，整数化を施す．

⎛ [Y] k , k ⎞[S] k , k = round ⎜⎟⎝ [Q ] k , k ⎠
0

0

1

0

1

1

3．量子化後の各係数に対して逆量子化[ Y ] k , k = [ Q ] k , k ⋅ [ S] k , k
0

1

0

1

0

1

を行い，2 次元の逆変換を施して，原画像を再構成してみよう．
解以下に MATLAB による処理例を示す．なお，pictureOrg，A，Qにはそれぞれ画像配列，変換行列，量子化テーブルが保存されているものとする．
% ブロック処理
nRows = size(pictureOrg,1);
nCols = size(pictureOrg,2);
for iRow = 1:2:nRows
for iCol = 1:2:nCols% ブロック抽出
X = pictureOrg(iRow:iRow+1,...
7.2

信号変換の基礎151

iCol:iCol+1);
Y = A*X*A.';% 順変換

S = round(Y./Q); % 量子化
Y = Q.*S;% 逆量子化X = A.'*Y*A;% 逆変換% ブロック配置
pictureRec(iRow:iRow+1,...
iCol:iCol+1) = X;endend
図 7.7（c）に再構成の結果 pictureRec を示す．垂直水平の高周波成分を含む右下ブロックの画
素値が平均値に置き換えられている様子が分かる．
Image Processing Toolbox がある場合は，blkproc 関数を用いて% ブロック処理
fun = inline(...
'A.''*(Q.*(round((A*X*A.'')./Q)))*A',...
'X','A','Q');
blkSize = [2 2];
pictureRec = ...
blkproc(pictureOrg,blkSize,fun,A,Q);としても，同じ処理を実行できる．
実習 7.4

変換符号化

M-file ： practice07̲4.m
例題 7.7 の手続きを，量子化テーブルを変えながら実際の画像でも試してみよう．また，原画像と再構成画像を比較してみよう．

7.3

離散コサイン変換（DCT）

いよいよ，直交変換の代表例として離散コサイン変換（DCT）について解説しよう．DCT の特徴は以下のようにまとめられる．

• 変換核がコサイン関数で与えられる
152

第7章

DCT とウェーブレット変換

図 7.84 × 4 画像配列

6

5

3

2

6

5

3

2

2

3

5

6

2

3

5

6

• 基底ベクトルが対称性をもつ• フーリエ解析と密接な関係がある• 準最適変換である• 高速アルゴリズムが存在する● 定義
1 次元 M 点 DCT の変換行列 CM は

[CM ] k,n =1
k ⎛⎝ n + ⎞⎠ π22
ck cosMMk, n = 0, 1, , M − 1 ……………………………………………（7.19）と定義される．ただし，⎧⎪ 1
k=0
ck = ⎨ 2
k = 1, 2, , M − 1⎩⎪1であり，[・]k, n は k 行 n 列目の要素を意味する．直交行列であるため，逆行列 CM−1 は転置行列 CMT で与えられる．なお，2 次元 DCT は分離処理される．
例題 7.82 次元離散コサイン変換

図 7.8 に示す 4 × 4 の画像配列に対して 4 × 4 の 2 次元 DCT を施し，変換係数を求めてみよう．
解
以下に，MATLAB による処理例を示す．なお，Xには図 7.8 に示す画像配列が保存されているものとする．
nPoints = 4; % DCT 点数% DCT 行列の計算[n,k] = meshgrid(0:nPoints-1,0:nPoints-1);
scaling = sqrt(2/nPoints)*...
diag([1/sqrt(2) ones(1,nPoints-1)]);
C = scaling * cos((k.*(n+0.5)*pi)/nPoints);% 2 次元 DCT
Y = C*X*C.'
結果として，次の変換係数が得られる．
7.3

離散コサイン変換（DCT） 153

Y =16.0000

0

0

0

0

5.82840-0.4142

0

0

0

0

0

-2.414200.1716

なお，2 次元 DCT の順変換と逆変換（IDCT）
は，dct 関数，idct 関数を利用して

Y = dct(dct(X.').');
X = idct(idct(Y.').');
もしくは，Image Processing Toolbox の dct2 関数，idct2 関数を利用して，

Y = dct2(X);X = idct2(Y);のようにも計算できる．
例題 7.9基底ベクトルと基底画像

4 点 1 次元 DCT の基底ベクトルと 4 × 4 の 2 次元 DCT の基底画像を確認してみよう．
解
以下に，MATLAB による処理例を示す．ただし，Cには 4 点 DCT 行列が保存されているものとする．
% 基底ベクトルの表示
nRows = size(C,1);
figure(1);for iRow = 1:nRows
subplot(ceil(nRows/2),2,iRow);stem(C(iRow,:));end% 基底画像の表示
figure(2);adj = max(abs(C(:)))^2; % 輝度調整用
for iRowV=1:nRows
154

第7章

DCT とウェーブレット変換

1
0.4
0

0.2
0

2

1

3

4

−1
1

0.5

1

0

0

−0.5

1

2

3

4

−1
1

2

3

4

2

3

4

（a）基底ベクトル

図 7.9（b）基底画像

4 点 1 次元 DCT の基底ベクトルと 4 × 4 2 次元 DCT の基底画像

for iRowH=1:nRows% 基底画像の計算
basisVecV = C(iRowV,:).';
basisVecH = C(iRowH,:).';
B=kron(basisVecV,basisVecH.');% 表示のための輝度調整
B=uint8(127*(B/adj+0.5));
subplot(nRows,nRows,...
nRows*(iRowV-1)+iRowH);
imshow(B); % もしくは，imshowcq(B);endend
図 7.9 に基底ベクトルと基底画像を示す．
図 7.9 より，DCT は異なる波の成分をもつ基底から構成されていることが分かる．左上が直流（DC）成分，そのほかは交流（AC）成分に対応する．
また，図 7.2（a）を重複のない 8 × 8 画素のブロックに分割し，それぞれに対して 8 × 8 の 2 次元
DCT（ブロック DCT）を施した結果を図 7.10 に示す．直流（DC）係数にエネルギが集中していることが分かる．また，スカーフの細かい模様の部分では交流（AC）係数も大きな値をもつことが分かる．
なお，Image Processing Toolbox がある場合， dctdemo コマンドによって 2 次元 DCT による簡単な画像圧縮のデモンストレーションを見ることができる．

7.3

離散コサイン変換（DCT） 155

（a）ブロックごと（b）係数ごと

図 7.10 8 × 8 ブロック DCT の処理例

実習 7.5

基底ベクトルと基底画像

M-file ： practice07̲5.m
M ≠ 4，特に M ＝ 8 の場合についても，基底ベクトルと基底画像を確認してみよう．
● DFT との関係
DCT が信号処理の世界で広く利用されている理由の一つに DFT との密接な関係がある．周波数積と畳み込み演算の関係が，ある条件下において，DCT でも成立することが証明されている．また，
別の理由としてカルーネン・レーベ変換（KLT）との密接な関係がある．これらの関係について解説
しよう．
（1）一般化 DFT の定義
まず，一般化 DFT（GDFT ： Generalized DFT）の紹介から始めよう．信号 x[n]の M 点 GDFT は，
M −1

X M(a, b) [k] = ∑ x[n]WM(k+ a)(n+ b)

k = 0, 1, , M − 1 …………………………………………………（7.20）

n =0と定義される．ただし， WM = e−j2π
M であり，a と b は任意の実数である．GDFT は DFT と同じように

ユニタリ変換である．a = b = 0 の場合，すなわち，XM(0, 0) [k]は DFT に帰着する．a，b は，それぞれ周
波数サンプル点，時間サンプル点のシフト量を意味する．
a = 0，b = 1/2 と選択した GDFT は DCT と深い関係にある．この GDFT は特に Odd-time DFT（OTDFT）と呼ばれる．

⎛ 0, 1 ⎞M 点 DFT の変換行列を W M(0, 0)とし，M 点 OTDFT の変換行列を WM⎝ 2 ⎠ と表現すると，⎛ 0, 1 ⎞WM⎝ 2 ⎠ = Λ M WM(0,0) ……………………………………………………………………………………（7.21）kという関係が成立する．ただし，ΛM は M × M 対角行列であり，その k 行 k 列目要素は [Λ M ] k, k = WM2 = W2M = ekΛ M ] k, k = WM2 = W2kM = e

156

−j

π
k
M と与えられる．

第7章

DCT とウェーブレット変換

k

−j

π
M

例題 7.10

OTDFT

8 点 OTDFT がユニタリ変換であることを確かめてみよう．
解
0

1
2

†

0

1
2

が証明できればよい．数学的な証明については読者自身にお任せすることにして，以下では MATLAB 上における確認の例を示そう．
nPoints = 8; % 変換点数
Wdft = dftmtx(nPoints); % DFT 行列
k=0:nPoints-1;
Lambda = diag(exp(-j*pi/nPoints*k));Wotdft = Lambda * Wdft; % OTDFT 行列
Wotdft' * Wotdft % ユニタリ性の確認
結果は c ＝ 8 倍の単位行列となる．
（2）OTDFT と DCT
いま，M 点の信号 x [n]から，2M 点の対称な実信号⎧ x[ n ]u[n] = ⎨⎩ x[ 2 M − 1 − n ]0, 1, , M − 1

M, M + 1, , 2M − 1………………………………………………………
（7.22）

を定義し，u [n ]の 2M 点 OTDFT を考えよう．
⎛ 0, 1 ⎞2 M −11
k ⎛ n + ⎞⎠2

X 2⎝M 2 ⎠ [k] = ∑ u[ n ]W2M⎝
n =0

1
M −1
⎛ k⎛ n+ 1 ⎞−k ⎛ n + ⎞ ⎞= ∑ x[ n ] ⎝ W2M⎝ 2 ⎠ + W2M ⎝ 2 ⎠ ⎠n =0

1k ⎛⎝ n + ⎞⎠ π2
= 2 ∑ x[ n ] cos
M
n =0
M −1

k = 0, 1, , 2M − 1……………………………………
（7.23）⎛ 0, 1 ⎞変換係数 X 2⎝M 2 ⎠ [k] は cos 関数の性質により対称となり，独立な係数の数は k = 0，1，…，M − 1 のM 点となる．すなわち，計算する変換係数は半分でよい．実は，正規化のためのスケーリングを除けば，式（7.23）の変換は DCT そのものであり，式（7.19）は，[CM ] k, n=⎛ 1⎞⎤
ck ⎡ ⎝ 0, 2 ⎠⎢⎣W2M E M ⎥⎦ k, n
2M

k, n = 0, 1, , M − 1 …………………………………………（7.24）と等価である．ここで，E M は，2M × M の対称拡張行列

7.3

離散コサイン変換（DCT） 157

1

x [0]
x [1]
x [2]
x [3]

1/4

W 16

1

2
1/2√￣

W 16

2

1/2√￣
2

3

1/2√￣
2

W 16

8点DFT

4

W 16

(0,0)
W8

y [0]
y [1]
y [2]
y [3]

5

W 16
6

W 16
7

W 16

E4

図 7.11( 0, 12 )8点OTDFT W8

8 点 OTDFT による 4 点 DCT の計算⎛ 1 0  0⎞
⎜ 0 1  0⎟⎜⎟
⎜    ⎟⎜ 0 0  1⎟⎟
EM = ⎜⎜ 0 0  1⎟⎜⎟
⎜    ⎟⎜ 0 1  0⎟⎜⎟
⎝ 1 0  0⎠である．
例題 7.11OTDFT と DCT

8 点 OTDFT により，4 点 DCT が与えられることを確かめてみよう．
解
図 7.11 に処理フローを示し，以下に MATLAB 上におけるコマンド例を示す．ただし，8 点
OTDFT 行列が Wotdft に保存されていると仮定する（例題 7.10 を参照）．
nPoints = 4;
E = [ eye(nPoints) ; ...
fliplr(eye(nPoints)) ];C = 1/sqrt(2*nPoints)*...
diag([1/sqrt(2) ones(1,nPoints-1)])*...
Wotdft(1:nPoints,:)*E;
Cは，dct(eye(4))と同じ結果を与える．

158

第7章

DCT とウェーブレット変換

実習 7.6

OTDFT と DCT

M-file ： practice07̲6.m
M ≠ 4，特に M ＝ 8 の場合についても式（7.24）の関係を確かめてみよう．
● KLT との関係
KLT は，それそのものが信号に依存するため，符号化などへの実用例は DCT に比べるとあまり見られない．しかし，定常確率過程に対して無相関化，エネルギ寄与率最大化，符号化利得最大化な
どの点で最適な変換である．
まずは，KLT 行列の定義を示そう．
（1）KLT の定義
以下では，実数の定常確率過程の連続する M 点信号からなる M 次元ベクトルを x とする．また，

R xx を x の共分散行列 R xx = E { xxT} − E { x } E { xT }と定義する．ただし，E {・}は期待値である．KLT

行列はベクトル x に依存し，その k 番目の基底ベクトルは，R xx φ k = λ k φk …………………………………………………………………………………………（7.25）を満たす Rxx の正規化固有ベクトル φ k として与えられる．なお，λk は R xx の固有値である．結果として KLT 行列 Φ は，T

Φ = (φ 0, φ 1, , φ M −1)………………………………………………………………………………
（7.26）と与えられる．通常，λ0 ＞ λ1 ＞…＞ λM−1 となるように並べられる．共分散行列 R xx が実対称行列であるため，行列 Φ は正規直交行列として与えられる．
例題 7.12

KLT 行列図 7.3（a）の画像について，水平方向に画素のペアを組んで構成した 2 次元ベクトル集合の共分
散行列 R xx を求め，KLT 行列を求めてみよう．
解
以下に，MATLAB のコマンド例を示す．ただし，setOfX には，例題 7.2 と同じ，水平方向の画素ペアで構成された 2 次元ベクトルの集合が保存されていると仮定する．
Rxx = cov(double(setOfX.')); % 共分散行列[V,D] = eig(Rxx);% 固有値分解[Y,I] = sort(diag(D)); % 固有値のソート% 固有ベクトルを並び換えと転置
Phi = V(:,nPoints-I+1).';KLT 行列が Phi として与えられ，基底ベクトルの符号の違いを除けば，式（7.1）の変換行列と類似した行列となる．垂直方向の画素ペアやそのほかの画像について確認してみよう．
7.3

離散コサイン変換（DCT） 159

KLT によって与えられる係数ベクトルを y = Φx とし，この共分散行列を R yy とすると，

R yy = ΦR xx ΦT …………………………………………………………………………………………（7.27）と表現される．Φ が R xx の固有ベクトルから構成されるため，R yy は固有値を対角要素としてもつ対角行列にほかならない．KLT は共分散行列の非対角要素が 0，すなわち係数間に相関のない（無相関な）信号へ変換することが分かる．
実習 7.7

KLT 行列M-file ： practice07̲7.m
M ≠ 2，特に M ＝ 8 の場合について KLT 行列を求めてみよう．
（2）1 次自己回帰過程モデル
隣り合うサンプル間の相関の強い信号は 1 次自己回帰（AR（1））
過程としてしばしばモデル化される．
AR（1）過程は期待値ゼロのホワイト・ノイズ（白色雑音）w [n ]と相関係数 ρ により，

x[n] = w[n] + ρx[n − 1] ………………………………………………………………………………（7.28）のように定義される．ただし，| ρ | ＜ 1 である．相関係数 ρ が 1 に近いほど，隣り合うサンプル間で似た値をとる．自然画像では，水平垂直方向共に相関係数 ρ は 0.95 程度といわれている．
AR（1）過程の M 次元ベクトルx = ( x[ 0 ], x[1], , x[ M − 1]) Tの共分散行列 Rxx は，ρρ 2  ρ M −1 ⎞⎛ 1⎜ ρρ  ρ M −2 ⎟1⎜⎟
R xx = ⎜ ρ2
ρ1  ρ M −3 ⎟
⎜ 

 
 ⎟
⎜⎜
⎟⎟
⎝ ρ M −1 ρ M −2 ρ M −3  1 ⎠………………………………………………………………
（7.29）のように Toeplitz 行列として与えられる．
（3）KLT と DCT
AR（1）過程に対して KLT を求め，ρ → 1 という極限操作を行うと，KLT 行列は DCT 行列に収束することが知られている．このことから，ρ が 1 に近い AR（1）
過程でモデル化できる自然画像に対して，
DCT は統計的に準最適な変換であると裏付けられる．
例題 7.13KLT と DCT

ρ = 0.95 の AR（1）過程の信号に対する 4 点 KLT の変換行列を求め DCT 行列と比較してみよう．
解
以下に，MATLAB 上でのコマンドの例を示す．
nPoints = 4; % ベクトルの次元
160

第7章

DCT とウェーブレット変換

rho = 0.95;% 相関係数|ρ |<1% AR(1) 過程モデルの共分散行列
Rxx = toeplitz(power(rho,0:nPoints-1));% 固有ベクトルと固有値の計算[V,D] = eig(Rxx);% 固有値のソート[Y,I] = sort(diag(D));% KLT 行列
Phi = V(:,nPoints-I+1).'% DCT 行列
C = dct(eye(nPoints))
基底ベクトルの符号の違いを除けば，KLT と DCT は類似した結果となる．
実習 7.8KLT と DCT

M-file ： practice07̲8.m
M ≠ 4，特に M ＝ 8 の場合についても比較してみよう．ρ の値も変えながら確認してみよう．
● 実現技術DFT との関係，KLT との関係に加えて，DCT の普及に欠かせない特徴が，高速アルゴリズムの存在である．以下では，スパース行列分解による高速アルゴリズムの一例を紹介し，さらに，H.264/
MPEG-4 AVC で採用されている整数精度変換を紹介しよう．
（1）高速アルゴリズム
M 点 DCT を行列演算により実現すると M 2 回の乗算と M(M − 1)の加算を要する．一方で，DFT との関係を利用して高速フーリエ変換（FFT）により演算回数を減らす方法がある．FFT 法は既存ライ
ブラリなどが使える利点はあるが，複素演算を伴うため，M が小さいときはあまり効果を期待できな
い．以下では，複素演算を用いずに高速化する Wang のアルゴリズムを紹介しよう．
準備として，タイプ I 〜 IV の 4 種類の DCT 行列を紹介しよう．なお，これまで本書で扱ってきた
DCT はタイプ II そのものである．

[C IM +1 ] k, n =k nπ2ck cn cos
M
M

[C IIM ] k, n =1k ⎛⎝ n + ⎞⎠ π22
ck cosMMk, n = 0, 1, , M ………………………………………………（7.30a）k, n = 0, 1, , M − 1………………………………………
（7.30b）

7.3

離散コサイン変換（DCT） 161

[C III
M ] k, n =⎛ k + 1 ⎞ nπ⎝22⎠cn cosMM[C IV
M ] k, n =⎛k + 1 ⎞ ⎛ n + 1 ⎞ π
⎝
2
2⎠ ⎝
2⎠
cos
M
M

k, n = 0, 1, , M − 1 ………………………………………（7.30c）

k, n = 0, 1, , M − 1 …………………………………（7.30d）

ただし，

⎧⎪ 1
ck = ⎨ 2⎪⎩1

k = 0, M

k = 1, 2, , M − 1

Wang はこれら 4 種類の DCT の行列分解を

C IM +1 =I
o JM ⎞⎛ C IMO ⎞ ⎛ M22⎜⎟
1 T ⎜ 2 +1
⎟ o
B M +1
2 o ⎟
III
⎜
2
⎜ O C M JM⎟⎝
2 ⎠ ⎜ J M o −I M ⎟
2
⎝ 2
2 ⎠

C IIM =

⎛ CIIMO ⎞ ⎛ IM JM ⎞1 T⎜ 22⎟⎜ 2
BM⎟ …………………………………………………………（7.31b）
IV
2⎜ O C M J M ⎟ ⎜⎝ J M −I M ⎟⎠
2
2
⎝
2 2 ⎠

C III
M =

III
O ⎞
⎛ I M J M ⎞ ⎛ CM
1
2
2
⎟ BM …………………………………………………………（7.31c）⎜ J M −I M ⎟ ⎜ 2⎟ ⎜ O J M CIV
2 ⎜⎝
M⎟
2
2 ⎠ ⎝
2
2 ⎠

C IV
M =

⎛ CIIIO ⎞M
1⎟TM ⎜ 2（7.31d）
III BM VM ………………………………………………………………
2⎜ O Γ M CM ⎟⎝⎠22………………………………………………
（7.31a）と与えている．ただし，M を偶数とする．Wang の分解法では，すべてのタイプの DCT 行列がサイズが半分の DCT によって表現されるため，M が 2 のべき乗のときに分解を繰り返すことができる．
行列 IM，JM，BM は，それぞれ M × M の単位行列，左（右）から掛けて行（列）を反転する反転行列，
左から掛けて偶数行と奇数行を上下に分ける置換行列である．また，行列 ΓM は，対角要素が [ ΓM ] k, k
= (−1)k と定義される M × M の対角行列である．I4，J4，B4，Γ4，また，T4，V4 の具体例を以下に示
そう．

⎛ 1 0 0 0⎞
⎛ 0 0 0 1⎞
⎛ 1 0 0 0⎞
⎛1 0 0 0 ⎞⎜ 0 1 0 0⎟
⎜ 0 0 1 0⎟
⎜ 0 0 1 0⎟
⎜ 0 −1 0 0 ⎟⎟ , J4 = ⎜⎟ , B4 = ⎜⎟ , Γ4 = ⎜⎟,I4 = ⎜⎜ 0 0 1 0⎟
⎜ 0 1 0 0⎟
⎜ 0 1 0 0⎟
⎜0 0 1 0 ⎟
⎜
⎟
⎜
⎟
⎜
⎟
⎜
⎟
⎝ 0 0 0 1⎠
⎝ 1 0 0 0⎠
⎝ 0 0 0 1⎠
⎝ 0 0 0 −1⎠
11⎛ 2 0 0 0 ⎞0 0 S16⎛ C16⎞⎜ 0 1 −1 0 ⎟⎜ 0 C 3 S3
⎟
0
16
16
⎟
⎟ , V4 = ⎜T4 = ⎜
3
3
0 ⎟−C16⎜ 0 1 1 0 ⎟⎜ 0 S16⎜ 1⎜⎟
1 ⎟S16 DCT
0 とウェーブレット変換
0 −C16⎠⎝ 0 0 0 2⎠
162 第 7⎝章

C 41

x [0]
x [1]

S 81

x [6]

y [2]

C 81

−1

−S 81

x [3]

x [5]

y [4]

−C 41

x [2]

x [4]

y [0]

C 41
C 41

−1

y [6]

C 83

1
C 16

√￣
2

−1

1
S 16

3
C 16

3
S 16

−1

−1

3
S 16

−1

−1

−C 3

⎛ 1 0 0 0 ⎞16⎛ 1 0 0 0⎞
⎛ 0 0 0 1⎞
⎛ 1 0 0 0⎞
⎜ 0 −1 0 0 ⎟3
⎜ 0 1 x0[7]0 ⎟⎜ 0 0 1 0⎟
⎜ 0 0 1 0⎟
2
⎟ , J4 = ⎜ −1 ⎟ , B4 = ⎜ √￣
⎟ , Γ 4 = ⎜ −1 −C ⎟16,
I4 = ⎜
1 7.120 ⎟ Wang⎜ の高速
0 1 0 DCT
0 ⎟（タイプ⎜II，M
0 1 0＝ 08）⎜0 0 1 0 ⎟⎜0 0 図
⎟
⎜
⎟
⎜
⎟
⎜
⎟
⎜
⎟
⎝ 0 0 0 −1⎠⎝ 0 0 0 1⎠
⎝ 1 0 0 0⎠
⎝ 0 0 0 1⎠

3
S 16

y [1]
y [5]
y [3]
y [7]

1
1
⎛ 2 0 0 0 ⎞0 0 S16
⎛ C16
⎞
⎜
⎟
⎜
⎟
3
3
0
0
C
S
16
16
⎟ , V4 = ⎜ 0 1 −1 0 ⎟T4 = ⎜
33⎜ 0 1 1 0 ⎟⎜ 0 S16
−C16
0 ⎟
⎜ 1
⎟
⎜
⎟
1
−
0
0
S
C
⎝ 16
⎝ 0 0 0 2⎠
16 ⎠ただし， Ci = cosiπiπ, Si = sin である．



図 7.12 に Wang による 8 点 DCT（タイプ II）の実現法を示す．なお，1/√￣
2 によるスケーリングは図中では省略している．IDCT の高速実現については，例えば図 7.12 の構成で，流れ図の矢印の向きを右から左へとれば実現できる．また，以下の性質も利用できる．

CMI +1 = CMI +1 ………………………………………………………………………………………（7.32a）−1

CMII = CMIII …………………………………………………………………………………………（7.32b）−1

CMIII = CMII ……………………………………………………………………………………………（7.32c）−1

CMIV = CMIV …………………………………………………………………………………………（7.32d）−1

Wang のアルゴリズムによる M 点 DCT（タイプ II）の乗算回数 μ ( CMII )と加算回数 α ( CMII )を示そう．

μ ( CMII ) =M
log2 M + 1 ………………………………………………………………………………（7.33a）2

α ( CMII ) =3M
log2 M − M + 1
2

M ≥ 2 ……………………………………………………………（7.33b）

この演算量は TM に現れる平面回転を00 ⎞ ⎛1 0 ⎞⎛ Ci + Si⎛ Ci Si ⎞ ⎛ 1 0 −1⎞ ⎜⎟ ⎜0 1 ⎟
i
i
⎜
⎟ ×
⎟ = ⎜
−
C
+
S
0
0


⎟ ……………………………………………（7.34）⎟⎜⎝ Si −Ci ⎠ ⎝ 0 1 1 ⎠ ⎜Si ⎠ ⎝ 1 −1⎠
0
⎝ 0
7.3

離散コサイン変換（DCT） 163

と変形し，3 回の乗算と 3 回の加算で実現するものと仮定している．M = 8 のとき，乗算回数は 13 回，
加算回数は 29 回となり，行列演算の 64 回，56 回に比べて効率的であることが分かる．
例題 7.14

Wang のスパース行列分解

M = 8 の場合について，式（7.31b）の関係を確かめてみよう．
解
数学的な証明については読者自身にお任せすることにして，以下では MATLAB におけるコマ
ンド例を示そう．
I4 = eye(4);% 4 × 4 単位行列

J4 = fliplr(I4); % 4 × 4 反転行列
O4 = zeros(4);% 4 × 4 ゼロ値行列

I8 = eye(8);% 8 × 8 単位行列

B8 = [ I8(1:2:end,:) ;I8(2:2:end,:) ]; % 8 × 8 置換行列
CII4 = dct(eye(4));% 4 × 4DCT-II 行列

CIV4 = dctiv(eye(4));% 4 × 4DCT-IV 行列% 8 × 8DCT-IV 行列
CII8 = 1/sqrt(2) * B8.' ...
* [ CII4 O4 ;O4 CIV4*J4 ] ...
* [ I4 J4 ;J4 -I4 ]dct(eye(8))と同じ結果が与えられる．なお，DCT（タイプ IV）を計算するために dctiv 関数を別に用意した．
Wang のアルゴリズムの実装例として wadcti，wadctii，wadctiii，wadctiv の各関数も用意したので内容を参照されたい．
（2）整数精度 DCT
地上デジタルのワンセグ放送で採用されている動画像符号化標準 H.264/MPEG-4 AVC では，動き補償予測後あるいはイントラ予測後の残差データに対して 4 × 4 の 2 次元 DCT をベースとした 2 次元変換を採用している．ただし，例題 7.8 の 2 次元 DCT と以下の点で異なっている．

• 整数精度変換である• 逆変換ミスマッチがない• 主要な計算は加算とシフトのみで実現できる
164

第7章

DCT とウェーブレット変換

• スケーリングは量子化に統合され，乗算回数が低減される

配列 X の 2 次元 4 × 4 DCT は，

1 1 1 11 1 1 d1 d −d −1
1 d −1 −1
X
1 −1 −1 1
1 −d −1 1
d −1 1 −d
1 −1 1 −d

Y = ( CXCT ) ○ E =a2 ab a2 abab b2 ab b2○ 2⎜ a ab a2 ab…………………（7.35）

ab b2 ab b2と等価表現できる．ただし，○は要素ごとの掛け算を意味し，

3π ⎞cos ⎛⎝π⎞1
1
8 ⎠⎛a= , b=cos ⎝ ⎠ , d =π228
cos ⎛⎝ ⎞⎠8である．H.264/MPEG-4 AVC では，これを

a=

1
, b=
2

2
1
, d=
5
2

と近似し，

1 1 1 11 2 1 12 1 −1 −2
1 1 −1 −2
X
1 −1 −1 1
1 −1 −1 2
1 −2 2 −1
1 −2 1 −1

Y = ( C f XCTf ) ○ E f =ab 2 aba2
2
ab b2 ab b2
4 2 4○ 2 ababa2
a2
22
ab b2 ab b2
2 4 2 4a2……………（7.36）という変換を定義している．変換核 Cf X C fT は整数の加算とシフトのみで実現され，スケーリング E f
は量子化に含められる．
例題 7.15整数精度変換図 7.8 に示す 4 × 4 の画像配列に対して 4 × 4 の整数精度変換を施し，変換係数を求めてみよう．
解
以下に，MATLAB による処理例を示す．なお，Xには図 7.8 に示す画像配列が保存されているものとする．
Cf = [ 1
2

1

1

1 ;

1 -1 -2 ;1 -1 -1
1 -2

1 ;2 -1 ];

a = 1/2; b = sqrt(2/5);
e00 = a^2; e01 = a*b/2; e11 = b^2/4;
Ef = [ e00 e01 e00 e01 ;7.3

離散コサイン変換（DCT） 165

e01 e11 e01 e11 ;e00 e01 e00 e01 ;e01 e11 e01 e11 ];% 2 次元 DCT
Y = (Cf*X*Cf.').*Ef
以下のように，例題 7.8 の結果と若干異なる結果が与えられる．

Y =7.00001.2649 -1.0000

0.63251.2649 -0.2000 -1.2649

1.4000-1.0000 -1.2649
0.63251.0000 -0.6325

1.4000 -0.6325

0.2000

なお，逆変換は，

1 1 1 1  a2 ab a ab    1 1 1 1 
2   ab b2 ab b2    1 1 − 1 −1 
 1 1 −1 −1  
T
2 2


 
X = Ci ( Y○Ei ) Ci =  2
 Y○  2
 a ab a2 ab    1 −1 −1 1  1 −1 −1 1  
1  1 1 −1 1 − 1  
 ab b2 ab b2    2 −1 1 − 2 2……………（7.37）と与えられる．
実習 7.9整数精度変換M-file ： practice07̲9.m
例題 7.15 で得られた係数 Y を逆変換し，元の配列 X が再構成されることを確かめてみよう．また，異なる配列 X に対しても確かめてみよう．

7.4

フィルタ・バンクフィルタ・バンクは，情報圧縮や信号解析，適応信号処理など，広い分野で利用される要素技術である．以下では，信号変換行列とフィルタ・バンクの関係について説明する．DCT が，ある特殊なフィルタ・バンクであることも示そう．また，フィルタ・バンクは離散時間ウェーブレット変換（DWT）
においても重要な役割を果たすことを解説しよう．
● 並列構成フィルタ・バンクは，図 7.13 に示されるように分析器と合成器から構成される．分析器は複数のデシメータ，合成器は複数のインターポレータから構成される．分析器から入力された信号 X(z)は，
166

第7章

DCT とウェーブレット変換

X (z )⁝H 0 (z )P0

H 1 (z )P1⁝⁝

HM −1(z )Y 0 (z )Y 0 (z )Y 1 (z )Y 1 (z )YM −1 (z )YM −1 (z )PM −1（a）分析器P0

F 0 (z )P1

F 1 (z )

＋

⁝

⁝

⁝

PM −1

FM −1(z )＋X (z )（b）合成器図 7.13 一般的なフィルタ・バンク
X (z )H 0 (z )2

H 1 (z )2（a）分析器Y 0 (z )Y 0 (z )Y 1 (z )Y 1 (z )2

F 0 (z )2

F 1 (z )＋Xˆ (z )（b）合成器図 7.14 2 分割フィルタ・バンク

分析器で複数の帯域に分割され，何らかの処理が施される．圧縮などの応用では，量子化やエント
ロピ符号化が行われる．分割された信号 Yk (z )はサブバンド信号と呼ばれる．M は分割数を，Pk は k
チャネルの間引き率を表している．
（1）完全再構成フィルタ・バンク
分析器と合成器は，完全再構成条件
Xˆ (z) = c z− d X(z) ………………………………………………………………………………………（7.38）を満たすように設計できる．ここで，c は任意の複素定数，d は任意の整数である．この条件は，復元信号 X̂(z)が，スケーリングと遅延を除いて原信号 X(z)と一致することを意味している．このような性質をもつフィルタ・バンクを特に，完全再構成フィルタ・バンクと呼ぶ．
（2）2 分割フィルタ・バンク
図 7.14 は，M = P 0 = P 1 = 2 という構成の 2 分割フィルタ・バンクを示している．通常，H 0 (z )，F0 (z )は低域通過フィルタとして，H1(z)，F1(z)は高域通過フィルタとして設計される．後述するように，この構成のフィルタ・バンクは離散時間ウェーブレット変換において重要な役割を果たす．
図 7.14 の構成の入出力関係は，ダウン・サンプラ，アップ・サンプラ，フィルタの入出力関係より，Xˆ (z) = T (z ) X(z ) + A(z) X(−z) …………………………………………………………………………（7.39）と表現できる．ただし，

1{H 0 ( z) F0 (z) + H 1 (z) F1 (z ) }2
1
A(z) = {H 0 (− z) F0 (z) + H 1 (− z)F1 (z)}2

T (z) =

である．A(z)はエリアジング成分 X(−z)にかかる伝達関数であり，完全再構成を保証するためにはA(z) = 0 ………………………………………………………………………………………………（7.40）
7.4

フィルタ・バンク167

でなければならない．さらに，この条件の下でT ( z) = cz − d ……………………………………………………………………………………………（7.41）となれば，このときのみ式（7.38）が満たされる．式（7.40），（7.41）は，式（7.38）の必要十分条件となっている．
例題 7.16

完全再構成フィルタ・バンク

次のフィルタ・バンク（M = P0 = P1 = 2）
が完全再構成条件を満たすことを確認してみよう．また，
H0 (z )，H1 (z )の周波数特性も確かめてみよう．

1
1(1 + z−1 ), H1 (z) = (1 − z−1 )2
2
F0 (z) = z −1 2H0 (z −1), F1 (z) = z −1 2H1 (z−1 )H 0 (z) =解A(z ) = 1，T(z ) = z−1 となることが確認できる．数式上での確認は読者自身にお任せすることにして，以下では MATLAB における確認の例を示そう．
% 分析フィルタ
h0 = [ 1

1 ]/2;

h1 = [ 1 -1 ]/2;
% 合成フィルタ
f0 = 2*fliplr(h0); % 時間反転して 2 倍
f1 = 2*fliplr(h1); % 時間反転して 2 倍% A(z)
h0m = h0 * diag([ 1 -1 ]); % H0(-z)
h1m = h1 * diag([ 1 -1 ]); % H1(-z)
A = ( conv(h0m,f0) + conv(h1m,f1) )/2
A =
0 0 0
% T(z)T = ( conv(h0,f0) + conv(h1,f1) )/2
次の結果が得られる．
T =0 1.0000 0
H0 (z )，H1 (z )の周波数振幅特性を図 7.15 に示す．
168

第7章

DCT とウェーブレット変換

100

信号強度［dB］

−10
−20
−30
−40
−50
−60
−70

0

0.2

0.4
0.6
0.8
正規化周波数［×πrad/サンプル］1

図 7.15 2 分割フィルタ・バンクの周波数振幅特性の例

実習 7.10

完全再構成フィルタ・バンク

M-file ： practice07̲10.m
次のフィルタ・バンク（M = P0 = P1 = 2）
が完全再構成条件を満たすことを確認してみよう．また，
H0 (z )，H1 (z )の周波数振幅特性も確かめてみよう．
1 (H 0 (z) =1 + 3 ) + (3 + 3 )z −1 + (3 − 3 )z −2 + (1 − 3 )z −3
81 (H 1 (z) =1 − 3 ) − (3 − 3 )z −1 + (3 + 3 )z −2 − (1 + 3 )z −3
8F0 (z) = z −3 2H 0 (z −1)

{

}

{

}

F1 (z ) = z −3 2H 1 (z−1)● 行列演算との関係
フィルタ・バンクは，信号を変換し，再び復元する機能をもつ．これは行列演算による順変換と逆変換に対応する．
いま，議論を簡単にするために，図 7.14 に示される最大間引き 2 等分割フィルタ・バンクを考え，各フィルタの伝達関数を，k = 0，1 に対して，

Hk ( z) = hk [ 0 ] + hk [1] z−1 + hk [ 2] z−2 + hk [ 3]z−3 ………………………………………………………（7.42）

Fk (z) = fk [ 0 ] + fk [1] z−1 + fk [ 2] z−2 + fk [ 3] z−3 ………………………………………………………（7.43）
とおく．このとき図 7.14 の分析器と合成器はそれぞれ図 7.16（a），（b）のように表現でき，全体は図7.17 のように等価表現できる．
まず，分析器に着目しよう．これは，2 × 4 行列による行列演算を繰り返すことにほかならない．

7.4

フィルタ・バンク169

h 0 [3]z −1

x [n ]

z

−1

z

−1

f 0 [0]h 0 [2]2＋y 0 [m ]y 0 [m ]

2

＋

2

＋

h 0 [0]z −1＋

y 1 [m ]y 1 [m ]

＋

＋

z −1

2
＋

（b）合成器2 分割フィルタ・バンクでの内積演算

h 0 [3]2z… x [2 ] x [1 ] x [0 ] …

f 0 [0]h 1 [3]−1h 0 [2]2＋h 1 [2]z −1

h 0 [1]2＋h 0 [0]2

f 0 [1]2＋

f 0 [3]＋…

4×2行列演算y 0 [2] y 0 [1] y 0 [0]…
y 1 [2] y 1 [1] y 1 [0]

＋

z −1
＋

z −1
2

＋

z −1
2

⁝

⁝

u 0 [1]u 2 [0]x [2 ]＋
u 1 [1]
u 3 [0]x [3 ]＝
u 0 [2]u [1]x [4 ]＋ 2
u 1 [2]u 3 [1]x [5 ]⁝

重複保持＋

f 1 [3]2×4行列演算x [1 ] x [−1] x [−3]x [2 ] x [0 ] x [−2]…
…
x [3 ] x [1 ] x [−1]x [4 ] x [2 ] x [0 ]2

f 1 [2]h 1 [0]… x [2 ] x [1 ] x [0 ] …

＋
f 1 [0]f 1 [1]f 0 [2]h 1 [1]z −1

図 7.17x [n ]＋z −1

h 0 [1]（a）分析器図 7.16＋f 1 [0]

重複加算

2 分割フィルタ・バンクと行列変換⎛ x [ 2 m − 3 ]⎞
⎜
⎟
[
]
y
m
[
]
[
]
[
]
[
]
h
h
h
h
3
2
1
0
0
0
0
⎞ ⎜ x [ 2 m − 2 ]⎟⎛ 0 ⎞ ⎛ 0⎜
⎟ = ⎜⎟…………………………………………………
（7.44）⎝ y1[m] ⎠ ⎝ h1[ 3] h1[ 2] h1[1] h1[ 0 ] ⎠ ⎜ x[ 2 m − 1] ⎟   ⎜⎟P⎝ x[ 2 m ] ⎠A

一方，合成器は，⎛ u 0 [m]⎞ ⎛ f 0 [ 0 ] f1[ 0 ]⎞⎜ u [m] ⎟ ⎜ f [1] f [1] ⎟ y [m]1⎟ ⎛⎜ 0 ⎞⎟⎜ 1 ⎟ =⎜ 0
⎜ u 2 [m]⎟ ⎜ f 0 [ 2] f1[ 2]⎟ ⎝ y1[m] ⎠⎜⎟ ⎜⎟⎝ u 3 [m]⎠ ⎝ f 0 [ 3] f1[ 3]⎠

…………………………………………………………………
（7.45）

PSTと 4 × 2 行列による行列演算を繰り返すことにほかならない．最終出力 x̂ [n]は，xˆ [ 2m + k] = u k+2 [ m − 1] + u k[ m ], k = 0, 1 ……………………………………………………………（7.46）
170

第7章

DCT とウェーブレット変換

x [n ]xˆ [n ]

…

…

n

n

T

PS

PA

＋
T

PS

PA

＋
T

PS

PA

⁝

⁝＋

yk [ m ]（a）重複ブロック処理

x [n ]xˆ [n ]

…

…

n

n

T

PS

PA

T

PS

PA

T

PS

PA

⁝
図 7.18⁝yk [ m ]（b）非重複ブロック処理

重複ブロック処理と非重複ブロック処理の関係より，要素を半分ずらしながら重複加算することによって与えられる．
（1）DCT との関係
議論は，より一般的な M 等分割フィルタ・バンクに容易に拡張できる．分析フィルタ Hk (z )のタッ
プ数を LA とすると，分析器は M × LA 行列を用いた演算に帰着する．一方，合成フィルタ Fk (z )のタッ
プ数を LS とすると，合成器は M × LS 行列を用いた演算に帰着する．
LA = LS = 2M の場合，図 7.18（a）に示すように重複のあるブロック処理となり，LA = LS = M の場合，
7.4

フィルタ・バンク171

図 7.18（b）に示すように独立したブロック処理となる．変換行列とフィルタ係数は，[ PA ] k, n = hk[ LA − 1 − n ] ………………………………………………………………………………（7.47）[ PS ] k, n = f k[ n ] …………………………………………………………………………………………（7.48）のように関係する．
N 点 DCT（1 次元）
によるブロック DCT は，分割数 M = N，フィルタ・タップ数 LA = LS = N の最大間引き非重複型フィルタ・バンクによる処理と解釈できる．
例題 7.17

DCT 基底の周波数特性

4 点 DCT（1 次元）の基底ベクトルを分析フィルタ hk [ n ]と解釈して，周波数振幅特性を確認してみよう．
解以下に MATLAB 上でのコマンド例を示そう．
% DCT 点数
nPoints = 4;
% DCT 行列E = dct(eye(nPoints));% 周波数振幅特性
fftPoints = 512;
analysisFilters = fliplr(E);for iChannel = 1:nPoints[H(:,iChannel),W] = ...
freqz(analysisFilters(iChannel,:),1,...
fftPoints);endplot(W/pi,20*log10(abs(H)));図 7.19 に 4 点 DCT の周波数振幅特性を示そう．
実習 7.11

DCT 基底の周波数特性

M-file ： practice07̲11.m
8 点 DCT 基底の周波数特性も確かめてみよう．
（2）ポリフェーズ実現
図 7.17 は，マルチレート信号処理の性質を用いると図 7.20（a）に示すポリフェーズ・フィルタによる構成に等価変換できる．同じように，より一般的な M 等分割フィルタ・バンクも，図 7.20（b）のよ
うに構成することができる．ただし，E(z )と R(z )は，それぞれ分析フィルタ Hk (z )のタイプ I のポリ
172

第7章

DCT とウェーブレット変換

100

信号強度［dB］

−10
−20
−30
−40
−50
−60
−70

0

0.2

0.4
0.6
0.8
正規化周波数［×πrad/サンプル］1

図 7.19 4 点 DCT の周波数振幅特性
X (z )

h 0 [0]＋ h 0 [2] z −1

2

z −1

＋

f 0 [1]＋ f 0 [3] z −1

h 1 [0]＋ h 1 [2] z −1

f 0 [0]＋ f 0 [2] z −1

h 0 [1]＋ h 0 [3] z −1

f 1 [1]＋ f 1 [3] z −1

h 1 [1]＋ h 1 [3] z −1

2

Y 0 (z )＋Y 1 (z )＋z −1

f 1 [0]＋ f 1 [2] z −1E( z )

2＋

2＋

X (z )R( z )（a）図7.17の等価表現

X (z )Y 0 (z )

M
z −1
M
⁝

M
z −1

Y 1 (z )E( z )⁝R( z )⁝z −1

YM −1 (z )M
S/P 変換

M

＋

⁝

⁝

z −1
M

＋

X (z )

P/S 変換（b）M等分割フィルタ・バンク

図 7.20 フィルタ・バンクのポリフェーズ実現

フェーズ・フィルタおよび合成フィルタ Fk (z )のタイプ II のポリフェーズ・フィルタからなる M × M
行列多項式行列である．その行列要素は，[ E(z)] k,  = Ek,  (z ) ……………………………………………………………………………………（7.49）[ R ( z)] , k = R , k (z) ……………………………………………………………………………………（7.50）のように定義される．図中，S/P 変換はシリアル-パラレル変換，P/S 変換はパラレル-シリアル変換
7.4

フィルタ・バンク

173

となっており，Ek, l(z )，R l, k (z )は，それぞれ Hk (z )の l番目のタイプ I ポリフェーズ・フィルタ（位相数 M），Fk (z )の l番目のタイプ II ポリフェーズ・フィルタ（位相数 M）である．すなわち，
M −1

Hk( z) = ∑ E k,  ( zM ) z− ………………………………………………………………………………（7.51）
 =0

M −1

Fk ( z) = ∑ R, k ( zM ) z−( M −1+ ) …………………………………………………………………………（7.52）
 =0である．E(z )，R(z )は，ポリフェーズ行列と呼ばれる．
なお，任意の整数 m0 に対して，

P (z) = R(z) E(z) = c z− m I ……………………………………………………………………………（7.53）0が成立すると，フィルタ・バンクは完全再構成条件（十分条件）を満たし，T(z) = cz−(Mm0 + M − 1)となる．
ポリフェーズ行列による表現は，フィルタ・バンクの設計や実現において大変重要である．
例題 7.18

ポリフェーズ実現

実習 7.10 のフィルタ・バンクをポリフェーズ実現してみよう．
解
以下に，MATLAB による実現のコマンド例を示す．
% 入力信号の生成
xOrg = 0:5;
% 分析フィルタ
h0 = [ (1+sqrt(3)) (3+sqrt(3)) ...
(3-sqrt(3)) (1-sqrt(3)) ]/8;
h1 = [ (1-sqrt(3)) -(3-sqrt(3)) ...
(3+sqrt(3)) -(1+sqrt(3)) ]/8;
% タイプⅠのポリフェーズ・フィルタ（分析器）
e00 = h0(1:2:end);
e01 = h0(2:2:end);
e10 = h1(1:2:end);
e11 = h1(2:2:end);% 合成フィルタ
f0 = 2*fliplr(h0); % 時間反転して 2倍
f1 = 2*fliplr(h1); % 時間反転して 2倍% タイプⅡのポリフェーズ・フィルタ（合成器）
r00 = f0(2:2:end);
r10 = f0(1:2:end);
r01 = f1(2:2:end);
174

第7章

DCT とウェーブレット変換

r11 = f1(1:2:end);% S/P 変換x0 = [xOrg(1:2:end) 0];x1 = [0 xOrg(2:2:end)];% 分析処理（ポリフェーズ実現）
y0 = conv(e00,x0) + conv(e01,x1);
y1 = conv(e10,x0) + conv(e11,x1);% 合成処理（ポリフェーズ実現）
u0 = conv(r00,y0) + conv(r01,y1);
u1 = conv(r10,y0) + conv(r11,y1);% P/S 変換
xRec = upsample(u0,2,1)+upsample(u1,2);
変数 xOrg と xRec を比べると，遅延を除いて信号が完全に復元されることを確認できる．
実習 7.12

ポリフェーズ実現

M-file ： practice07̲12.m
ほかの入力信号でも完全再構成を確かめてみよう．
● リフティング手法
フィルタ・バンクの設計・実現の有効な手法としてリフティング手法がある．完全再構成を容易に実現でき，静止画像符号化の国際標準方式 JPEG2000 で採用されるなど，実用性が高い．
図 7.21 に 5/3 変換の，図 7.22 に 9/7 変換のリフティング構成を示す．JPEG2000 Part I では，5/3変換をロスレス（無歪）モードに，9/7 変換をロッシ（有歪）モードに採用している．
（1）5/3 変換
5/3 変換の分析・合成フィルタのインパルス応答は，表 7.1 のように 5 および 3 タップのフィルタから与えられる．
JPEG2000 では，図 7.21 の Q0，Q1 の位置に丸め処理を挿入し，演算結果の整数化を行っている．
X (z )

z −1

2
−

z −1

2

Y 0 (z )2＋−

1( 1＋z −1)
2

Q1

Q1

Q0

1
( 1＋z −1)
4

1
( 1＋z −1)
4＋
E( z )

図 7.21＋Y 1 (z )−1(1＋z −1)
2

z −1

Q0
z −1

＋

−

2

＋

R( z )

リフティング 5/3 変換

7.4

フィルタ・バンク175

X (z )z −12α( 1＋z −1)

z −1
2

z −1

＋
β( 1＋z −1)γ( 1＋z −1)

z −1

＋

Y 0 (z )1/K＋
δ( 1＋z −1)

Y 1 (z )K＋E( z )Y 0 (z )

K

z −1

＋
−
δ( 1＋z −1)

Y 1 (z )1/Kγ( 1＋z −1)β( 1＋z −1)

−
＋

z −1

2

＋
−
α( 1＋z −1)

z −1

−
＋

z −1

2

＋

X (z )R( z )

図 7.22 リフティング 9/7 変換

表 7.1
5/3 変換のインパルス応答（c は対称の中心）⁝⁝

x [n ]
1

−

1
2

1
2
1
−
2
−

1

1

⁝

1
−
2
1
−
2

1

h0[c±n]
6/8
2/8
−1/8

⁝

1

1
4
1
4

1

1
4
1
4

⁝

n
0
1
2

h1[c±n]1−1/2

f0[c±n]1
1/2⁝

Y 0 [m ]Y 0 [m ]Y 1 [m ]Y 1 [m ]

1
−
4
1
−
4
−

1

1
4

⁝

⁝

1

1

−

⁝

（a）分析処理

f1[c±n]
6/8
−2/8
−1/8

1
4
1
4
1
4

1

1

1

⁝

⁝
1
2

x [n ]

1
2
1
2
1
2
1
2

⁝

（b）合成処理

図 7.23 5/3 変換のインプレース演算実現

リフティング手法は，非線形処理も含めて，順変換と逆変換の各ステップの処理が一致している限り，どのような処理を施しても 1 ビットの狂いもなく完全再構成を保証する．JPEG2000 のロスレ
ス・モードでは，リフティング手法のこの利点を利用している．
なお，リフティング手法の別の利点として，インプレース（in-place）
演算が可能な点を挙げられる．
図 7.23 は，5/3 変換のインプレース演算手順を示している．
176

第7章

DCT とウェーブレット変換

例題 7.19

リフティング手法

図 7.21 に示す 5/3 変換が，完全再構成条件を満たすことを確認してみよう．また，各フィルタ
H0 (z )，H1 (z )，F0 (z )，F1 (z )のインパルス応答を確認してみよう．ただし，Q0，Q1 の影響は無視し
てよい．
解

1
0
 1
−1   z−1 0  E(z) =  1 4 (1 + z )    − 1 (1 + z−1) 1 1
0
  0 1  2
1
0   1 0   1 − 1 (1 + z−1) R(z) =  1
−1
4


−1  
 2 (1 + z ) 1   0 z   01

より，明らかにP(z) = R(z)E(z) = z−1Iとなる．よって，式（7.53）より 5/3 変換は完全再構成を保証する．また，各フィルタのインパルス応答を確認する MATLAB コマンドの例を以下に示そう．
% タイプⅠのポリフェーズ・フィルタ（分析器）
u00 = [1 0]; u01 = [1 1]/4; % 上向きステップ
u10 = [0 0]; u11 = [1 0];
ud00 = [0 u00]; ud01 = [u01 0]; % 遅延操作
ud10 = [0 u10]; ud11 = [u11 0];
p00 = [1 0]; p01 = [0 0]; % 下向きステップ
p10 = -[1 1]/2; p11 = [1 0];
e00 = conv(ud00,p00)+conv(ud01,p10); % 各要素
e01 = conv(ud00,p01)+conv(ud01,p11);
e10 = conv(ud10,p00)+conv(ud11,p10);
e11 = conv(ud10,p01)+conv(ud11,p11);% 分析フィルタ
h0 = upsample(e00,2)+upsample(e01,2,1);h1 = upsample(e10,2)+upsample(e11,2,1);
fvtool(h0,1,h1,1);% タイプⅡのポリフェーズ・フィルタ（合成器）
p00 = [1 0]; p01 = [0 0]; % 下向きステップ
p10 = [1 1]/2; p11 = [1 0];
pd00 = [p00 0]; pd01 = [0 p01]; % 遅延操作
7.4

フィルタ・バンク177pd10 = [p10 0]; pd11 = [0 p11];
u00 = [1 0]; u01 = -[1 1]/4; % 上向きステップ
u10 = [0 0]; u11 = [1 0];
r00 = conv(pd00,u00)+conv(pd01,u10); % 各要素
r01 = conv(pd00,u01)+conv(pd01,u11);r10 = conv(pd10,u00)+conv(pd11,u10);r11 = conv(pd10,u01)+conv(pd11,u11);% 合成フィルタ
f0 = upsample(r00,2,1)+upsample(r10,2);
f1 = upsample(r01,2,1)+upsample(r11,2);
fvtool(f0,1,f1,1);（2）9/7 変換
9/7 変換の分析・合成フィルタは，表 7.2 のように 9 および 7 タップのフィルタから与えられる．
JPEG2000 Part I のロッシ・モードで利用される 9/7 変換は，図 7.22 の α，β，γ，δ，Κ に近似値

α ≈ −1.586134342059924
β ≈ −0.052980118572961
γ ≈ 0.882911075530934
δ ≈ 0.443506852043971
Κ ≈ 1.230174104914001を与えればよい．なお，5/3 変換と同じように 9/7 変換もインプレース演算が可能である．
実習 7.13

リフティング手法

M-file ： practice07̲13.m
9/7 変換についても完全再構成条件と各フィルタのインパルス応答を確認してみよう．
● 画像処理応用
1 次元のフィルタ・バンクは，DCT と同じように，分離処理として画像の分析・合成に容易に適用することができる．ただし，DCT と異なり，重複ブロック処理となる．また，画像は空間的に有限な広がりをもつため，重複ブロック処理では，画像の境界において特別な処理を必要とする．

表 7.2
9/7 変換のインパルス応答（c は対称の中心）

178

第7章

DCT とウェーブレット変換

n
0
1
2
3
4

h0[c±n]0.602949
0.266864−0.078223−0.016864
0.026749h1[c±n]1.115087−0.591272−0.057544
0.091272f0[c±n]f1[c±n]1.115087
0.602949
0.591272 −0.266864−0.057544 −0.078223−0.091272 0.016864
0.026749

M

L＞M

M

（a）重複ブロック処理

図 7.24L＞M（b）非重複ブロック処理

重複ブロック処理と非重複ブロック処理
対称性を仮定x [n ]−

1

図 7.25対称拡張法を適用した 5/3 変換のインプ
レース演算実現（赤線で囲った部分は，
対称拡張法と等価な処理を行うために変更した係数値）

1
2

1
−
2
1
−
2

1

−

1
2

対称性を仮定
1

1

1
2
1
4

1

1
4
1
4

−1

1

Y 0 [m ]Y 0 [m ]Y 1 [m ]Y 1 [m ]

1
1
−
2
1
−
4

1

−
1

1
4

対称性を仮定（a）分析処理

−

1
4
1
4
1
4

1

1

1
2

xˆ [n ]

1
2
1
2
1
2

1

1

対称性を仮定（b）合成処理

図 7.24 にフィルタのタップ数 L が分割数 M よりも長い場合と，タップ数 L と分割数 M が等しい場合の 2 次元ブロック処理の様子を示す．図 7.18 と比べてみよう．画像の場合，境界における処理が重要となる．
分析フィルタ，合成フィルタのインパルス応答が対称性（直線位相特性）をもつ場合，対称拡張法
により完全再構成を保証しながら，フィルタリングによる点数増加を回避できる．ただし，出力も対称となるように，入力とフィルタの対称性，入力信号の長さ，間引き率あるいは補間率の関係に留意しなければならない．詳細な説明は割愛する．
図 7.25 に，偶数長の信号に対する境界を考慮した 5/3 変換のインプレース演算実現を示そう．9/7
変換の場合は，係数を変えて同じステップを繰り返せばよい．
例題 7.20

画像の 5/3 変換

図 7.3（a）のモノクロ画像に対して，5/3 変換後のサブバンド画像を確かめてみよう．また，5/3
逆変換により原画像を復元してみよう．

7.4

フィルタ・バンク179

図 7.26

図 7.3（a）に対する 5/3 変換後のサブバンド画像

解
図 7.26 にサブバンド画像を示す．また，MATLAB 上でのコマンド例，5/3 順変換・逆変換関数の例を以下に示す．ただし，画像は pictureGray に保存されているものとする．
% 5/3 順変換
[subLL,subHL,subLH,subHH] = im53trnscq(pictureGray);% サブバンド画像の表示
picturesSub = [ subLL 4*abs(subHL);
4*abs(subLH) 4*abs(subHH) ];figure(1); imshow(uint8(picturesSub));
title('Subband pictures');% 5/3 逆変換
pictureRec = ...
im53itrnscq(subLL,subHL,subLH,subHH);% 復元画像の表示
figure(2); imshow(uint8(pictureRec));
title('Reconstructed picture');関数 im53trnscq は，画像の 5/3 順変換を行う関数で，その内容は以下のとおりである．

function [subLL,subHL,subLH,subHH] = im53trnscq(fullPicture);% 倍精度に変換
fullPicture = double(fullPicture);% 垂直変換（インプレース演算）
180

第7章

DCT とウェーブレット変換

fullPicture = ...
predictionStep(fullPicture,-1/2);
fullPicture = ...
updateStep(fullPicture,1/4);% 水平変換（インプレース演算）
fullPicture = ...
predictionStep(fullPicture.',-1/2);
fullPicture = ...
updateStep(fullPicture,1/4).';% 係数並べ替え
subLL = fullPicture(1:2:end,1:2:end);
subHL = fullPicture(1:2:end,2:2:end);
subLH = fullPicture(2:2:end,1:2:end);
subHH = fullPicture(2:2:end,2:2:end);
関数 im53itrnscq は，画像の 5/3 逆変換を行う関数で，その内容は以下のとおりである．

function fullPicture = im53itrnscq(subLL,subHL,subLH,subHH);% 配列の準備
fullSize = size(subLL)+size(subHH);
fullPicture = zeros(fullSize);% 係数並べ替え
fullPicture(1:2:end,1:2:end) = subLL;
fullPicture(1:2:end,2:2:end) = subHL;
fullPicture(2:2:end,1:2:end) = subLH;
fullPicture(2:2:end,2:2:end) = subHH;% 水平変換（インプレース演算）
fullPicture = ...
updateStep(fullPicture.',-1/4);
fullPicture = ...
predictionStep(fullPicture,1/2).';% 垂直変換（インプレース演算）
fullPicture = ...
updateStep(fullPicture,-1/4);
fullPicture = ...
predictionStep(fullPicture,1/2);
7.4

フィルタ・バンク181

なお，関数 predictionStep と関数 updateStep は垂直方向にリフティング演算を行う関数で，その内容は以下のとおりである．

function picture = predictionStep(picture,p);%picture(2:2:end,:) = picture(2:2:end,:) ...
+ p * ( ...
picture(1:2:end,:) ...
+ [picture(3:2:end,:); ...
picture(end-1,:)]);% end of predictionStep
および，

function picture = updateStep(picture,u);%
picture(1:2:end,:) = picture(1:2:end,:) ...
+ u * ( ...
[picture(2,:); ...
picture(2:2:end-1,:)] ...
+ picture(2:2:end,:));% end of updateStep
上記 predictionStep 関数，updateStep 関数は対称拡張法を適用している．偶数長のみに対応
しているが，奇数長への対応も容易である．なお，JPEG2000 Part I のロスレス・モードのような整数化のための丸め処理は行っていない．
実習 7.14

画像の 9/7 変換

M-file ： practice07̲14.m
9/7 変換についてもサブバンド画像と復元画像を確認してみよう．

7.5

離散時間ウェーブレット変換（DWT）

ウェーブレット変換は，フランス人学者 Morlet により石油探索のための人工地震波解析に導入さ
182

第7章

DCT とウェーブレット変換

れて以来，多くの物理学者，数学者，工学者たちにより理論的基礎作りや応用が試みられてきた．
以下では，ディジタル信号の圧縮や解析に利用される離散時間ウェーブレット変換（DWT）について解説しよう．
● ツリー構成DWT は，オクターブ分割と呼ばれる 2 分割フィルタ・バンクのツリー構成によって実現される．
図 7.27 にレベル 3 の DWT の構成例を示す．図 7.14 のフィルタ・バンクの低域のチャネルを繰り返し分割し，ツリー構造に配置することで，DWT は構成される．前章で解説したマルチレート信号処理の性質を利用すると，図 7.27 は図 7.28 のように並列構成として等価表現できる．
図 7.29 に，DCT のような等分割フィルタ・バンク（分割数 8）とオクターブ分割の DWT（レベル 3）の時間周波数分解能の概略図を示そう．等分割フィルタ・バンクが，周波数帯域によらず時空間分解能が一定であるのに対して，DWT は周波数が高いほど帯域分解能が低く，時間分解能が高くなる．
1 次元 DWT は分離処理により 2 次元に拡張できる．図 7.30 に示すように，DWT の基底画像はブ
ロック DCT の基底画像と異なり，互いに重複し，周波数に応じてそのサイズが変わる．このような性質は，人間の視覚特性に適しており，ブロック DCT に比べて，ブロックひずみやモスキート・ノ
イズの少ない画像圧縮を実現できる．

(0)

H 0 (z )

2

(0)

2

H 1 (z )(1)
H 0 (z )2(1)
H 1 (z )2

H 0 (z )

(2)

2

(2)

2

H 1 (z )（a）分析器(2)2

F 0 (z )2

F 1 (z )

＋

(2)

(1)

2

F 0 (z )2(1)
F 1 (z )

＋

(0)

2

F 0 (z )2

F 1 (z )＋(0)（b）合成器図 7.27DWT の構成例（3 レベル）

(0)

(1)

2

(2)

4

8

8

F 0 (z ) F 0 (z ) F 0 (z )

(0)

(1)

2

(2)

4

8

8

F 1 (z ) F 0 (z ) F 0 (z )H 0 (z ) H 0 (z )

(1)

2

4

4

F 1 (z ) F 0 (z )

(0)

2

2

(0)

H 0 (z ) H 0 (z ) H 0 (z )H 0 (z ) H 0 (z ) H 1 (z )(0)

H 1 (z )図 7.28

(2)

4

(1)

2

(0)

(2)

4

(1)

2

(0)

(1)

2

(0)

＋

F 1 (z )＋＋DWT の等価並列構成（3 レベル）7.5

離散時間ウェーブレット変換（DWT） 183

周波数

周波数

8等分割

高
8係数

8係数

……

……

低

低

時間

8サンプルごと（a）等分割（DCTなど）

図 7.293レベル・オクターブ分割

高時間

8サンプルごと（b）オクターブ分割（DWT）

時間周波数分解能の比較

低

DCT

DWT

ブロックが
互いに重複している

周
波数

耐ブロック・ノイズ

周波数に応じてブロック・サイズが異なる
耐モスキート・ノイズ

高

図 7.30

例題 7.21周波数帯域と基底画像の比較

画像の 5/3 DWT

図 7.3（a）のモノクロ画像に対して，レベル数 3 の 5/3 DWT を施し，サブバンド画像を確かめてみよう．また，5/3 逆 DWT により原画像を復元してみよう．
解
MATLAB 上でのコマンド例を以下に示す．ただし，画像は pictureGray に保存されているものとする．
% 3 レベル 5/3 DWT[subLL2, subHL2, subLH2, subHH2] = im53trnscq(pictureGray);[subLL1, subHL1, subLH1, subHH1] = im53trnscq(subLL2);[subLL0, subHL0, subLH0, subHH0] = im53trnscq(subLL1);% サブバンド画像の表示
subband0 = [subLL0 4*abs(subHL0) ;
184

第7章

DCT とウェーブレット変換

図 7.31

図 7.3（a）に対する 5/3 DWT 後のサブバンド画像

4*abs(subLH0) 4*abs(subHH0)];
subband1 = [subband0 4*abs(subHL1) ;4*abs(subLH1) 4*abs(subHH1)];
subband2 = [ subband1 4*abs(subHL2);
4*abs(subLH2) 4*abs(subHH2) ];figure(1); imshow(subband2);% 3 レベル 5/3 IDWT
subLL1 = im53itrnscq(subLL0, subHL0, subLH0, subHH0);
subLL2 = im53itrnscq(subLL1, subHL1, subLH1, subHH1);
pictureRec = im53itrnscq(subLL2, subHL2, subLH2, subHH2);% 復元画像の表示
figure(2); imshow(pictureRec);図 7.31 にサブバンド画像を示す．図 7.10（b）の 8 × 8 ブロック DCT の結果と比べてみよう．
実習 7.15

画像の 9/7 DWT

M-file ： practice07̲15.m
9/7 DWT についてもサブバンド画像と復元画像を確認してみよう．
● レギュラリティ
図 7.27 のツリー分割を無限に繰り返すことで，連続信号に対する離散ウェーブレット級数（DWS ： Discrete-time Wavelet Series）注 7-1 が生成できる．レギュラリティとは，この DWS の既定関数の滑らかさを表す尺度である．元の低域通過フィルタ H0 (z )が，ある Q(z )を用いて，
注 7-1 ：文献によっては，DWS を離散ウェーブレット変換（DWT）と呼ぶ場合があるので注意が必要．

7.5

離散時間ウェーブレット変換（DWT） 185

K⎛ 1 + z −1 ⎞H0(z) = ⎝Q(z) ………………………………………………………………………………（7.54）
2 ⎠のように因数分解できるとき，DWS は K 次のレギュラリティをもつという注 7-2．H0 (z )が，z = e jπ = −1 に K 重根をもつことから，K が大きいほどより滑らかであるといえる．
レギュラリティは DWT においても重要である．1 次以上のレギュラリティを満たすと，画像圧縮へ応用した際，網目状に模様が入るチェス盤ひずみを回避できる利点がある．例題 7.16
（ハール基底），実習 7.10（3 次 Daubechies 基底）で紹介した変換，5/3 変換，9/7 変換のすべてがレギュラリティをもつことが確かめられる．

章末問題
問題 7.1

ユニタリ行列（MATLAB 演習）

DFT 行列がユニタリ行列であることを MATLAB で確かめてみよう．M 点 DFT 行列は，
W=dftmtx(M)で与えられる．また，行列 Wの複素共役転置は W'とすればよい．
問題 7.2直交行列（MATLAB 演習）

DCT 行列が直交行列であることを MATLAB で確かめてみよう．M 点 DCT 行列は，
C=dct(eye(M))（Image Processing Toolbox がある場合は C=dctmtx(M)）で与えられる．また，行列Cの転置は C.'とすればよい．
問題 7.3

DCT 符号化（MATLAB 演習）

図 7.3（a）に対して，8 × 8 ブロック DCT を施し，各ブロックの変換係数に対して K = 1 として量子化テーブル（JPEG の輝度成分用）を使った線形量子化を行い，逆量子化，ブロック IDCT を施して画像を復元し，原画像と比較してみよう．また，K > 0 の値を変えて試してみよう．
k1
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56

k0

14 17 22 29 51 67 80 62
18 22 37 56 68 109 103 77
24 35 55 64 81 104 113 92
49 64 78 87 103 121 120 101
72 92 96 98 112 100 103 99

注 7-2 ：厳密には，連続関数への収束条件も必要である．

186

第7章

DCT とウェーブレット変換

×K

問題 7.4

実画像に対する KLT 行列（MATLAB 演習）

図 7.3（a）の画像について，垂直方向に連続する 8 画素で構成した 8 次元ベクトル集合の共分散行列
Rxx を求め，KLT 行列を求めてみよう．
問題 7.5KLT の基底画像（MATLAB 演習）

相関係数 ρ = 0.95 の AR
（1）
過程に対する 8 点 KLT の基底画像を確かめてみよう．また，ほかの相関係数（−1 < ρ < 1）でも試してみよう．
問題 7.6

ポリフェーズ行列

実習 7.10 のフィルタ・バンクをポリフェーズ行列で表現し，式（7.53）の完全再構成条件が満たされることを確認してみよう．
問題 7.7DWT の基底ベクトル（MATLAB 演習）

3 レベルの 5/3 DWT および 9/7 DWT の基底ベクトルを確かめてみよう． 図 7.28 を参考にするとよい．また，ほかのレベル数でも確認してみよう．
問題 7.8DWT 符号化（MATLAB 演習）

3 レベルの 5/3 DWT もしくは 9/7 DWT で 図 7.3（a）の画像を変換し，いくつかのサブバンド画像をゼロ値に置換してから画像を復元してみよう．また，ほかの画像，ほかのレベル数，量子化なども試してみよう．
問題 7.9

レギュラリティ（MATLAB 演習）

例題 7.16（ハール基底），実習 7.10（3 次 Daubechies 基底）で紹介した変換，5/3 変換，9/7 変換の低域
通過フィルタ H0(z)が，z = −1 において，ゼロとなることを複素平面上の零点-極配置をプロットして確かめてみよう．なお，MATLAB では，zplane 関数もしくは fvtool を利用して確認できる．
参考文献（1）貴家仁志，村松正吾；マルチメディア技術の基礎 DCT 入門，CQ 出版社，1997 年．
（2）小野定康，鈴木純司；わかりやすい JPEG/MPEG2 の実現法，オーム社，1995 年．
（3）藤原洋監修；最新 MPEG 教科書，アスキー出版局，1994 年．
（4）Mohammed Ghanbari ； Standard Codecs: Image Compression to Advanced Video Coding，The Institution of ElectricalEngineers，2003．
（5）Iain E.G. Richardson ； H.264 and MPEG-4 Video Compression，Wiley，2003．
（6）小野定康，鈴木純司；わかりやすい JPEG2000 の技術，オーム社，2003 年．
（7）David S. Taubman and Michael W. Marcellin ； JPEG2000, Image Compression Fundamentals, Standards and Practice，Kluwer Academic Publishers，2002．

章末問題

187

第8章

多次元信号処理の基礎

前章までは，分離処理を中心に多次元信号処理の操作について解説した．本章では，より一般的な多次元信号処理の表現についてまとめ，多次元フーリエ解析や多次元標本化などの基礎理論について概説する．さまざまな例を通して理解を深めよう．
なお，以下では R は実数，Z は整数，RD は D 次元実数ベクトル，ZD は D 次元整数ベクトルの集合と
する．

8.1

多次元信号処理の概要

多次元信号処理の応用は，画像・映像処理をはじめ無線通信，レーダ，ソナー，地震波解析，生体情報処理など，多岐にわたる．その要素技術の多くは，信号解析，ノイズ除去，特徴抽出，レート変換，信号推定，信号復元などであり，システム構成や実現技術において 1 次元信号処理との共通点も多い．一方で，1 次元では存在しない多次元特有の問題もある．
● 多次元信号処理の特徴
1 次元信号処理の知識のみで対処しようとすると，多次元の利点を生かせないばかりではなく，思わぬわなにはまることもある．これらの違いの多くは，2 次元において既に現れている．以下に例を挙げよう．

• 標本化は標本格子により表現され，標本化密度（レート）以外に標本位置の構造も設定する必要がある．

• 自由度が増え，制約が減る．例えば，標本化定理を満たす信号帯域の形状が無数に存在し，フィ
ルタ仕様の決定が困難な場合がある．

• 多変数多項式は因数分解できるとは限らず，フィルタ設計や安定性の判別が困難な場合がある．
● 多次元信号の表現
ここでは，一般的な D 次元の信号について解説を進める．このために，変数のベクトル表記を導入
する．
8.1

多次元信号処理の概要

189

（1）変数のベクトル表記
D 個の連続変数 pd をもつ D 次元信号x ( p 0, p1, , p D − 1 ), pd ∈ R ……………………………………………………………………………（8.1）

および，D 個の離散変数 nd をもつ D 次元信号x[ n 0, n1, , n D − 1 ], n d ∈ Z ……………………………………………………………………………（8.2）

は，変数を D 次元ベクトルに置き換えて，それぞれx (p), p ∈ RD ……………………………………………………………………………………………（8.3）
x[n], n ∈ Z D ……………………………………………………………………………………………（8.4）のように表現できる．静止画像の場合はそれぞれ，

x (p), p ∈ R2 ……………………………………………………………………………………………（8.5）
x[n], n ∈ Z 2 ……………………………………………………………………………………………（8.6）となる．動画像の場合は，x (p)，p ∈ R 3 あるいは x [n]，n ∈ Z 3 となるが，本書では，特に時間変数を
強調して，

⎛ p⎞
x ⎜ ⎟ , p ∈ R2, t ∈ R ……………………………………………………………………………………（8.7）⎝t⎠⎡n⎤x ⎢ ⎥ , n ∈ Z 2, k ∈ Z ……………………………………………………………………………………（8.8）⎣k ⎦と書く場合もある．
例題 8.1

動画像変数のベクトル表記

次の動画像信号について，ベクトル表記を導入して表現してみよう．

x[ n 0, n1, k] = cos(ω 0 (n 0 − v 0 k) + ω 1 ( n1 − v1k ))解
n = [n0, n1]T，ω = (ω 0, ω 1)T，v = (v 0, v 1)T とすると，⎡n⎤x ⎢ ⎥ = cos(ω T ( n − vk ))⎣k ⎦という表現を得る．
（2）単位インパルス信号
変数のベクトル表記を用いると，D 次元インパルス信号は

1
0

n

その他

…………………………………………………………………………………
（8.9）のように簡潔に定義できる．ただし，n ∈ ZD であり，0 はすべての要素が 0 となる D 次元ベクトルとする．1 次元のインパルス信号 δ [n]，n ∈ Z を用いて
D−1

δ [ n ] = ∏ δ [ n d ] ………………………………………………………………………………………（8.10）
d =0

190

第8章

多次元信号処理の基礎多次元ではサンプル点を格子（Lattice）で表現

p1
v1

V＝(v0 | v1 | … | vD −1)

v0

p0

図 8.1

多次元信号の標本化点のように表現できる．
（3）畳み込み演算
多次元の線形シフト不変システム T{・}は，そのインパルス応答 h [n] = T {δ [ n ] }により，その入出力関係を畳み込み演算によって表現できる．いま，変数のベクトル表記を用いると，D 次元線形シフ
ト不変システムの入出力関係は

y[ n ] = T {x[ n ]} = ∑ x[ k ] h[ n − k ] = ∑ h[ k ] x[ n − k ] = h[ n ] ∗ x[ n ]
k∈Z

D

k∈Z

n ∈ Z D …………………（8.11）

Dのように表現される．一般的な D 次元の線形シフト不変システムについても，2 次元の場合と同じよ
うに，インパルス応答 h [ n ]がそのシステムを特徴づけ，IIR/FIR，分離性，因果性，安定性などに性質の違いが現れる．
（4）標本化D 次元のアナログ信号 x (p)の標本化は，D × D の非特異行列 V によってx[ n ] = x ( Vn) …………………………………………………………………………………………（8.12）のように表現される．ここで，V は標本化行列と呼ばれる．標本化点の集合（標本化格子）は，図 8.1に示すように行列 V の列ベクトル vd で生成される並行超平面体（2 次元の場合は平行四辺形）を標本空間に敷き詰めてできる頂点の集合となる．標本化点の集合は LAT( V )と表され，LAT( V ) = {Vn ∈ RD | n ∈ Z D} ………………………………………………………………………（8.13）と定義される．
画像表現において最も素直な方形標本化，x [ n0, n1 ] = x( n0 P0, n1 P1 )の場合，標本化行列 V は

 P0
V = (v0 | v1) = 00 ………………………………………………………………………………（8.14）
P1 のように与えられる．方形標本化の標本化行列は，次元によらず常に対角行列として与えられる．
例題 8.2

インターレース映像の標本化

図 8.2 に，インターレース映像の標本化格子を示す．この標本化行列を求めよう．
8.1

多次元信号処理の概要

191

T/2
P1

P0

t

v2

v1
v0

図 8.2
インターレース映像の
標本化格子

p1

p0

第1フィールド
第2フィールド

フレーム

解
標本化格子の基本となる平行六面体を考える．これを構成する三つの列ベクトルからなる 3 × 3行列が標本化行列となるので，図 8.2 より標本化行列 V は，

⎛ 2P0 0 P0⎞
V = (v0 | v1 | v1) = 0 P1 0
T
⎝ 0 0 2⎠⎜⎜と与えられる．
なお，同じ格子を意味する行列は一意ではない．行列式の絶対値が 1 となる整数行列 E（ユニモ

ジュラ整数行列）を V に右から掛けて得られる V' = EV もまた同じ格子を示す標本化行列となる．

8.2

多次元信号の周波数と周期性

多次元におけるフーリエ解析への準備として，以下では，多次元信号の周波数と周期性について触れておこう．
● 多次元信号の周波数
1 次元余弦波の周波数は，単位時間（1 秒）当たりの波の数で与えられる．余弦波の位相の時間微分によって角周波数 Ω が与えられ，F = Ω/2π として周波数が与えられる．
以下は，2 次元の連続変数をもつ余弦波である．

x ( p 0, p1 ) = cos( Ω 0 p 0 + Ω 1 p1 ) ………………………………………………………………………（8.15）
各軸の角周波数は，それぞれの変数による位相の偏微分として
位相

0 1 ………………………………………………………………………………（8.16）と与えられる．2 次元以上の場合も同じように，各軸の角周波数が各変数による位相の偏微分として与えられる．
多次元の余弦波はベクトル表記によって
192

第8章

多次元信号処理の基礎x (p) = cos( Ω T p ), p, Ω ∈ RD …………………………………………………………………………（8.17）のように簡潔に表すことができる．さらに，オイラーの公式より，

x (p) =

1 jΩ p( e + e − j Ω p ) ……………………………………………………………………………（8.18）
2
T

T

なので，多次元余弦波は角周波数 ± Ω の多次元複素正弦波 e j Ω p と e − j Ω p から構成されているともいえTTる．
例題 8.32 次元余弦波

角周波数 Ω = (4π, 2π ) T の 2 次元余弦波の波形を見てみよう．
解
以下に，MATLAB 上でのコマンド例を示そう．
% 垂直角周波数
Omega0 = 4*pi;% 水平角周波数
Omega1 = 2*pi;% 標本点の定義[p0,p1] = meshgrid(...
-0.5:0.01:0.5,-0.5:0.01:0.5);% 2 次元余弦波の標本
x = cos(Omega0*p0 + Omega1*p1);% 2 次元余弦波の表示
surf(p1,p0,x);
xlabel('p_1');
ylabel('p_0');
zlabel('Magnitude');colormap gray;shading interp;
axis([-0.5 0.5 -0.5 0.5 -2 2]);
axis square;
図 8.3 に波形を示す．p0 軸に添った波の数が p1 軸のものに比べて倍であることが確かめられる．
実習 8.12 次元余弦波

M-file ： practice08̲1.m
さまざまな角周波数 Ω に対する 2 次元余弦波の波形を確かめてみよう．
8.2

多次元信号の周波数と周期性

193

n1
n1

2

信号強度

n0

n0，n1で生成される格子

0

n0

図 8.4

N＝[n0 | n1 | … | nD −1]

非方形周期信号

−2
0.5
0.5
0

p0

図 8.3

0

p1

−0.5 −0.52 次元余弦波の波形● 周期信号
続いて，多次元信号における周期性について解説しよう．
（1）周期行列
多次元周期信号は，連続変数と離散変数共に，それぞれx[ n ] = x[ n − Nl]l ∈ Z D …………………………………………………………………………（8.19）

x (p) = x ( p − Uq )q ∈ RD …………………………………………………………………………（8.20）という条件を満たす信号として定義される．ここで，N は D × D 非特異整数行列，U は D × D 非特異実数行列であり，共に周期行列と呼ばれる．
2 次元の離散信号において，N が diag ( N0, N1 )のように対角行列（diagonal matrix）である場合を考えよう．すると，周期性の条件は

 n 0 − N 0 l0 
 n0 x  = x n1 
 n1 − N 1 l1 

n 0, n1, l0, l1 ∈ Z …………………………………………………………（8.21）のように表現することができる．
例題 8.4非方形周期信号

図 8.4 に示す非方形周期信号の周期行列を求めよう．
解
2 次元信号の周期行列は 2 × 2 行列として与えられる．基本周期となる平行四辺形を生成するベクトルを行列の列ベクトルとすればよいので，周期行列は

2 1
N = [ n0 | n1 ] = 0 2と与えられる．なお，標本化行列の場合と同じように，同じ周期を与える行列は一意に決まらな
194

第8章

多次元信号処理の基礎いことに注意する．
（2）基本周期
基本周期内の整数ベクトルの集合がしばしば重要となる．ここで周期行列 N の各列ベクトル nd で生成される平行四辺形（超平面体）
内の整数ベクトル集合を N(N)と定義しよう．
例題 8.5基本周期内の整数ベクトル集合

図 8.4 に示す非方形周期信号の基本周期内の整数ベクトル集合を求めよう．
解⎧ ⎡ 0 ⎤ ⎡ 1 ⎤ ⎡1 ⎤ ⎡ 2 ⎤ ⎫N (N) = {n ∈ Z 2 | n = Nx, x ∈[0, 1)2} = ⎨ ⎢ ⎥ , ⎢ ⎥ , ⎢ ⎥ , ⎢ ⎥ ⎬⎩ ⎣ 0 ⎦ ⎣ 0 ⎦ ⎣1 ⎦ ⎣ 1 ⎦ ⎭ただし，[ 0, 1) D = {x | 0 ≤ x d < 1, d = 0, 1, , D − 1}

8.3

多次元フーリエ解析

1 次元の場合と同じように，信号のスペクトラムやシステムの周波数特性について知ることは，システム設計において必要不可欠である．以下では，多次元におけるフーリエ解析について，例題を交えながら解説しよう．
● フーリエ変換の定義
1 次元の場合と同じように，多次元のフーリエ解析においても，取り扱う信号の種類によっていく
つかの定義が存在する．以下では，多次元のフーリエ変換，離散空間フーリエ変換，離散フーリエ変換の定義を示そう．
（1）フーリエ変換（FT）
まず，変数が連続かつ非周期（孤立）である信号 x (p)のフーリエ解析法であるフーリエ変換（FT ：Fourier Transform）とその逆変換を以下に示す．

X ( jΩ ) = ∫x (p) =

x (p)e− j Ω p d pΩ ∈ RD ……………………………………………………………（8.22）

T

p∈R D

1
X ( jΩ ) e j Ω p d Ω( 2π ) D ∫Ω∈RT

Dp ∈ RD ……………………………………………………（8.23）

上記の積分は，変数 p あるいはΩの各要素を積分変数とする重積分である．ここで注意すべき点は，変数が連続かつ非周期（孤立）である信号 x (p)のフーリエ変換 X ( j Ω)もまた，変数が連続かつ非周期（孤立）の信号となる点である．
（2）離散空間フーリエ変換（DSFT）
次に，変数が離散かつ非周期（孤立）である信号 x [n]のフーリエ解析法である離散空間フーリエ変換（DSFT ： Discrete Space FT）とその逆変換を以下に示す．
8.3

多次元フーリエ解析

195

X (e jω ) = ∑ x[ n ]e − jω nTω ∈[R, 2 π )D ……………………………………………………………（8.24）

T

n∈Z D

x[ n ] =1
X (e jω )e jω n dω(2π )D ∫ω∈[0,2π )TTDn ∈ Z D ……………………………………………………（8.25）

ただし，[0, 2π)D は各要素の積分範囲が 0 〜 2π であることを意味する．すなわち，[ 0, 2π )D = {x ∈ RD | 0 ≤ xd < 2π , d = 0, 1, , D − 1}

である．上記の積分もまた，変数 ω の各要素を積分変数とする重積分である．ここで注意すべき点は，変数が離散かつ非周期（孤立）である信号 x [n]の DSFT X ( e jω )は，変数が連続かつ周期信号となる点
Tである．
（3）離散フーリエ変換（DFT）
最後に，変数が離散かつ有限（周期）である信号 x [n]のフーリエ解析法である離散フーリエ変換（DFT ： Discrete FT）とその逆変換を以下に示す．

X[k] =∑ x[ n]e− j k (2π N ) nT−1n∈N (N)x[ n ] =k ∈N ( NT ) ………………………………………………………（8.26）

1∑ X[ k]e j k (2π N ) n
det N k∈N
(N )
T

−1

T

n ∈ N ( N ) ………………………………………………（8.27）

ここで注意すべき点は，変数が離散かつ有限（周期）である信号 x [n]の DFT X [ k ]は変数が離散かつ有限（周期的）な信号となる点である．なお，| detN | は行列 N の行列式の絶対値である．

特に，周期行列 N が対角行列の場合，分離処理が可能となり，多次元 DFT が各次元ごとの 1 次元

DFT の繰り返しに帰着する．
例題 8.62 次元 DFT の分離処理

周期行列 N が対角行列 diag(N0, N1)の場合，この 2 次元 DFT が分離処理可能であることを示そう．
解WN = e−j

2π
N として，定義より

N0 −1 N1 −1

X [ kk ] = ∑
0
1

−j⎛

2π

∑ x[ nn ]e ⎝ N0n 0 =0 n 1 =00

k0 n 0 +1

2π
k 1 n 1⎞⎠
N1

N −1 N −1
N −1⎛⎞= ∑ ⎜ ∑ x[ nn ]WNk n ⎟ WNk n = ∑ X0 [ kn ]WNk n⎠=0
n =0 ⎝ n =0
n





 
1

1

0

1

0

0

1

0

0

1 1

1

0

1 1

1

1

1

0

1− D DFT

1− D DFTのような表現が得られる．ただし，
N0 −1

X0[kn ] = ∑ x[nn ]WNk n01

n 0 =0

0

0

1

0

0

結果として，各次元ごとの 1 次元 DFT に帰着する．
1 次元 DFT の計算には，1 次元の高速フーリエ変換（FFT）を利用できる．MATLAB では，2 次元
分離型 FFT を行う関数として fft2 関数が用意されている．また，多次元分離型 FFT を行う関数として fftn 関数が用意されている．
196

第8章

多次元信号処理の基礎

● 周波数特性
フーリエ変換（FT），離散空間フーリエ変換（DSFT），離散フーリエ変換（DFT）の結果は，信号が実数でも一般的には複素数となる．従って，しばしば極座標表現により，その振幅と位相を分けて議論する．
（1）振幅特性と位相特性
今，離散信号 x[n]を考えよう．この離散信号 x [n]がどのような角周波数の複素正弦波によって構成されているかを知りたければ，その DSFT X(e jω )を求めればよい．これを信号 x[n]の周波数特性と呼Tぶ．また，その振幅を振幅特性，位相を位相特性と呼び，これらは，周波数特性： X(e jω ) = A(ω)e jθ(ω)
T

振幅特性： A(ω) = | X(e jω ) |T

位相特性： θ(ω) = ∠X(e jω )Tと関係付けられる．
（2）DSFT と DFT の関係
DFT は DSFT を周波数領域で標本化した結果に一致する．実際，n ∉ N (N)において x [n] = 0 ならば，ω = 2 π N−Tk を DSFT の定義に代入することで，DFT の定義

X [ k ] = X (e jω ) ω =2 π N k ………………………………………………………………………………（8.28）
T−Tが与えられる．| detN | を大きくとることで，1 周期当たりの周波数標本点が増加し，DSFT の良い近似を与える．具体的には，信号のサポート領域外でゼロ値を想定し，大きな点数の DFT（FFT）を行えばよい．
例題 8.7

静止画像のスペクトラム

図 8.5（a）の画像の振幅特性と位相特性を確認しよう．
解MATLAB 上でのコマンド例を以下に示そう．なお，ワークスペースにおける画像の参照を
pictureGray とする．
% 2-D FFT 点数
sizeFft = [1024 1024];% 2-D FFT の計算
freqChar2d = fftshift(...
fft2(double(pictureGray),...
sizeFft(1),sizeFft(2)));% 振幅特性の表示（累乗則変換を利用）
figure(2);magnitude = abs(freqChar2d);
imshow(...
8.3

多次元フーリエ解析

197

（a）原画像（b）振幅特性（ω ∈[ −π , π )2）

図 8.5（c）位相特性（ω ∈[ −π , π )2）

静止画像のスペクトラム(magnitude/max(magnitude(:)))).^0.1);% 位相特性の表示（0[rad] を中間輝度値とする）
figure(3);phase = angle(freqChar2d);
imshow((phase+pi)/(2*pi));
図 8.5（b），（c）に，それぞれ振幅特性と位相特性を示す．上記の例では，480 × 704 の画像に対して，1024 × 1024 の 2 次元 FFT を施している．ここでは fft2 関数と fftshift 関数を利用した．

198

第8章

多次元信号処理の基礎

実習 8.2

静止画像のスペクトラム

M-file ： practice08̲2.m
さまざまな静止画像の 2 次元スペクトラムを確認してみよう．
例題 8.8

動画像のスペクトラム

映像ファイル calcio.avi を読み込み，振幅特性を確認してみよう．
解
MATLAB 上におけるコマンド例を以下に示そう．
% 3-D FFT 点数（高さ，幅，時間）
sizeFft = [256 256 128];% 映像データの読み込み
fileName = './data/calcio.avi';
nFrames = 128;
clear array3d;
w = hanning(nFrames);
for iFrame = 1:nFrames
frameCur = aviread(fileName,iFrame);
pictureGray = rgb2graycq(frameCur.cdata);array3d(:,:,iFrame) = ...
w(iFrame)*double(pictureGray)/255.0;
end
clear frameSeq pictureGray;% 3-D FFT の計算
freqChar3d = ...
abs(fftshift(fftn(array3d, sizeFft)));clear array3d;% 3-D スペクトラムの表示（累乗則変換を利用）
freqChar3d = freqChar3d/max(freqChar3d(:));
freqChar3d = freqChar3d.^0.1;[wt,wh,wv] = meshgrid( ...
-1:2/sizeFft(3):1-2/sizeFft(3),...
-1:2/sizeFft(1):1-2/sizeFft(1),...
-1:2/sizeFft(2):1-2/sizeFft(2));
freqChar3d = permute(freqChar3d,[2 3 1]);
199

0.4

ωV

0.2
0
−0.2
−0.4
0.4

0.2

ωH

図 8.6

0
−0.2
−0.4

−0.4

−0.2

0.2

0

0.4

ωT

動画像のスペクトラム

slice(wt,wh,wv,freqChar3d, ...
0 ,0, 0, 'nearest');shading flat;
axis vis3d;
colormap(jet);xlabel('\omega_T (\times\pi rad)');ylabel('\omega_H (\times\pi rad)');zlabel('\omega_V (\times\pi rad)');clear freqChar3d wt wh wv;
図 8.6 に結果を示す．時間方向のみハニング窓を適用した．MATLAB の 3-D 回転機能を利用して，いろいろな方向からこのスペクトラムを観測してみよう．
実習 8.3

動画像のスペクトラム

M-file ： practice08̲3.m
さまざまな動画像の 3 次元スペクトラムを見てみよう注 8-1．
● 周波数応答
線形シフト不変システムは，インパルス応答によってその性質が決定される．このインパルス応

注 8-1 ：大きなサイズや長時間の映像の場合，使用メモリを節約するために縮小処理やフレーム・レート変換を施した
り，窓関数などを利用してデータの切り出しを行ったりする必要がある．このとき，周波数の帯域や分解能への影響に注意する必要がある．

200

第8章

多次元信号処理の基礎

1

信号強度

0.8
0.6
0.4
0.2
0
1
1

0.5
0.5

0

0

ω 0 [×π rad] −0.5
−1 −1

図 8.7

−0.5

ω 1 [×π rad]平滑化フィルタの周波数応答

答の離散空間フーリエ変換（DSFT）もまた，その特性を知る上で重要である．これをシステムの周波数応答と呼び，また，その振幅を振幅応答，位相を位相応答と呼ぶ．
例題 8.9平滑化フィルタの周波数応答

次のインパルス応答 h [ n ]をもつ 2 次元平滑化フィルタの周波数応答を求めて，グラフ表示してみよう．

h[ −−11 ] =

1
1
1
1
1
1
1
1
1
, h[ 0−1 ] = , h[ 1−1 ] = , h[ 0−1 ] = , h[ 00 ] = , h[ 10 ] = , h[ 1−1 ] = , h[ 10 ] = , h[ 11 ] =
9
9
9
9
9
9
9
9
9

そのほか，h [n ] = 0．
解
以下に，MATLAB 上でのコマンド例を示そう．
% インパルス応答
h = ones(3)/9.0;% 2-D FFT の計算
sizeFft = [64 64];
ampRes = abs(fftshift(fft2(h,sizeFft(1),sizeFft(2))));% 周波数応答の表示[fx,fy] = freqspace(sizeFft,'meshgrid');mesh(fx,fy,ampRes);
8.3

多次元フーリエ解析

201

xlabel('\omega_1 (\times\pi rad)');ylabel('\omega_0 (\times\pi rad)');zlabel('Magnitude');
図 8.7 に，h [ n]の振幅応答を示す．なお，この特殊な例においては，周波数応答を

H (e jω ) =T1( 2 cos ω 0 + 1) ( 2 cos ω 1 + 1)9のように解析的に導くことも可能である．
なお，Image Processing Toolbox がある場合には，2 次元振幅応答の表示に freqz2 関数を利用できる．
実習 8.4

各種フィルタの周波数応答

M-file ： practice08̲4.m
そのほかの加重平均フィルタや 4 近傍および 8 近傍のラプラシアン・フィルタ，輪郭強調フィル
タの周波数応答を求めて，グラフ表示してみよう．

8.4

標本化定理の再確認

1 次元アナログ信号の標本化間隔 T による標本化は，周波数領域における周期 1/T（ 角周波数では2π/T ）のスペクトラムの周期化を意味した．多次元における標本化格子 LAT( V )による標本化もまた，
周波数領域におけるスペクトラムの周期化を意味する．
● 標本化とスペクトラム
標本化は周波数領域で何を引き起こすのか？ 標本列を連続信号としてフーリエ変換（FT）を行ってみよう．まず準備として，任意の連続関数 φ ( p )を

∫p∈R δ (t)φ ( p)d p = φ ( 0) ………………………………………………………………………………（8.29）
Dのように p = 0 のときの値 φ ( 0 )と関連付ける連続 δ 関数を導入する．関数 δ ( p )を多次元連続 δ 関数と呼ぶ．
すると，連続信号 x( p)の標本化行列 V による標本化は

x V ( p ) = x ( p ) ⋅ ⎛ ∑ δ (p − Vn) ⎞
⎝ n∈Z
⎠
D

……………………………………………………………………
（8.30）のように表現される．ここでは，標本化後の信号 xV(p)もまた連続変数をもつことに注意していただ
きたい．途中の計算は割愛するが，この信号のフーリエ変換 X U ( j Ω)は

X U ( j Ω) =

202

第8章

1
X ( j ( Ω − Uk )) ………………………………………………………………（8.31）
det V k∑∈ZD

多次元信号処理の基礎

のように導出される．ここで，| detV | は，標本化行列 V の列ベクトルが生成する平行超平面体の体積であり，1 次元の標本化間隔 T に相当する．また，X ( j Ω)は，元の連続信号 x ( p )のフーリエ変換である．最も注目すべき点は，X U ( j Ω )が，周期 U の周期信号となる点である．そしてこの周期行列 U は標本化行列 V によってU = 2π V−T ……………………………………………………………………………………………（8.32）と与えられる．
例題 8.10標本化行列と周期行列

図 8.8（a）の周波数サポート領域をもつ 2 次元のアナログ信号 X( j Ω)を次の標本化行列⎛ P P0 ⎞⎛ P0 0 ⎞0VR = ⎜
2⎟⎟ , VQ = ⎜⎝ 0 P1 ⎠⎝ 0 P1 ⎠でそれぞれ標本化することを考えよう．この標本化後の信号がもつ周波数スペクトラムのサポー
ト領域をそれぞれ描いてみよう．
解
標本化行列 VR，VQ のそれぞれに対応する周期行列 UR，UQ は，式（8.32）より，⎛ 1⎛ 1 0⎞
0⎞
P0
P0
⎜
⎟
⎜
⎟
UR = 2π ⎜1 ⎟ , UQ = 2π ⎜ 1 1 ⎟
⎜−
⎟
⎜ 0
⎟
P1 ⎠
⎝ 2P1 P1 ⎠⎝のように与えれる．よって，周波数スペクトラムのサポート領域は，それぞれ図 8.8（b），（c）のように描かれる．
（1）FT と DSFT の関係
標本化後の信号のフーリエ変換（FT）と DSFT の間にはX ( e jω ) = X U ( jΩ ) Ω= Uω / 2π ……………………………………………………………………………（8.33）
T

X ( j Ω) 2π

Ω0

X UR( j Ω )

P0
u0

P0

2π

Ω0

X UQ( j)Ω1P1（a）2次元アナログ信号の周波数サポート領域

P0 Ω0

u0

u0
u1 2 π

図 8.8

2π

u1

2π

（b）周波数スペクトラムのサポート領域（1）

Ω1

Ω1
u1

P1

2π

P1

（c）周波数スペクトラムのサポート領域（2）標本化行列と周期行列

8.4

標本化定理の再確認

203ω0
X Q (e j )
T

2π

−2π

2π

ω1

−2π

図 8.9

非方形標本化と DSFTのような密接な関係がある．DSFT の変数 ω は，FT の周期 U を 2 π I に正規化した角周波数と見なせる．ここで注意すべき点は，非方形標本格子による標本化の場合，DSFT の周波数スペクトラム形状
がひずんで見える点である．
例題 8.11

非方形標本化と DSFT

図 8.8（c）に対応する DSFT の周波数サポート領域を描いてみよう．
解
周期行列 UQ による周期を 2π I に正規化するため，図 8.9 のように描かれる．
非方形標本化信号のスペクトラムを DSFT（DFT）を用いて観測する場合は，注意が必要である．
（2）エリアジング
多次元標本化では，1 次元標本化の標本化定理を単純に拡張して適用するわけにはいかない．以下
は，多次元フィルタを設計する上で非常に重要な事実を例示している．
例題 8.12

多次元標本化の寛容性Ω)を例題 8.10 の標本化行列 VR
図 8.10（a）の周波数サポート領域をもつ 2 次元のアナログ信号 X( jΩ
で標本化することを考える．この標本化後の信号における周波数スペクトラムのサポート領域を

X (j

) 2π

Ω0

X UR( j

P0

) 2π

Ω0

P0

u0
2π

Ω1

P1

（a）周波数サポート領域をもつ
2次元アナログ信号

図 8.10204

第8章

多次元標本化の寛容性

多次元信号処理の基礎

u1

2π

Ω1

P1

（b）標本化後の信号における周波数
スペクトラムのサポート領域

描いてみよう．
解
図 8.10（b）に結果を示す．
1 次元の標本化の考え方を適用すれば，Ω0 の軸についてはまったくエリアジング回避の条件を満たしていない．にもかかわらず，エリアジングをまったく起こすことなく周期化されていることが分かる．すなわち，基本スペクトラム（図 8.10（b）の中央の薄青色部）を取り出せるフィルタが存在すれば，元のアナログ信号を完全に復元することができる．
● 大域的定速移動モデルのスペクトラム
図 8.10（b）に示すような状況が起こりうる身近な例として，簡単な映像のモデルとその周波数特性について紹介しよう．
図 8.11（a）に示すように，時刻 t = 0 におけるフレーム画像を x 0 (p)とし，このフレーム全体が一定の速度 v = (v0, v1 ) T で移動する大域的定速移動モデル

x ( tp ) = x 0 ( p − vt )p ∈ R 2, t ∈ R ……………………………………………………………………（8.34）を考える．
x 0 (p )のフーリエ変換を X 0 ( j Ω )とすると，x( tp )のフーリエ変換 X( jΩΩ t )はjΩ

X ( jjΩΩ ) = X 0 ( j Ω ) ⋅ 2π δ ( Ω T v + Ω t ) …………………………………………………………………（8.35）tのように導出される．上式が非ゼロとなる条件が， v0 
( Ω 0, Ω 1, Ω t )  v1  = 0 ………………………………………………………………………………（8.36）
 1
より，図 8.11（b）に示すようにベクトル( v0, v1, 1 ) T と直交する平面のみに X 0 ( j Ω )が存在するようなス
ペクトラムが得られる．
では，このような信号を標本化した場合を考えよう．垂直-時間周波数平面上のスペクトラムの例を図 8.11（c）に示す．垂直方向に動きがある場合，空間的に帯域制限がなされていれば，スペクトラ
ムが傾いても時間方向の標本化周期には影響を与えないことが分かる．むしろ，時間方向に帯域をtX0( jx 0 (p) ＝ x

( p0)

)

Ω0

()
v0
v1

Ω0

1

Ωt
Ωt

p1
p0
（a）大域的定速移動モデル

図 8.11Ω1（b）周波数スペクトラム（1）（c）周波数スペクトラム（2）

大域的定速移動モデルのスペクトラム

8.4

標本化定理の再確認

205

0
−0.5
−1
0.5

（a）フレーム画像

図 8.12

ω v [×π rad]

ω v [×π rad]

0.5

0
0
−0.5
−1 −1−0.50.5（b）静止状態の周波数スペクトラム

0.5
0
−0.5
−1
0.5

0
0
−0.5
−1 −1−0.50.5（c）動いている状態の周波数スペクトラムの例

大域的定速移動モデルのスペクトラムの例

制限してしまうと，空間解像度が犠牲になる．動きの激しい映像でフレーム間平均処理を施すとどうのような映像が出力されるかを想像してほしい．
例題 8.13

大域的定速移動モデルのスペクトラム

図 8.12（a）に示す画像を一定の速度( v 0, v 1) T = ( 2, 1 ) T［画素/フレーム］で動かした動画像を作成
し，その周波数スペクトラムを確認してみよう．なお，画像には空間において周期性を仮定しよう．
解以下に，MATLAB 上でのコマンド例を示そう．
% 速度ベクトル（垂直，水平）
velocity = [2 1];% 第 0 番目フレームの読み込み
pictureOrg = double(imread('./data/gaussian2d.tif'))/255.0;% 動画像の生成
nFrames = 32;
picture = pictureOrg;
figure(1);w = hanning(nFrames);
for iFrame = 1:nFrames
array3d(:,:,iFrame) = w(iFrame)*picture;
picture = circshift(picture, velocity);
imshowcq(picture);drawnow;end
図 8.12（b）に静止している状態，図 8.12（c）に動いている状態の周波数スペクトラムを示す．画
206

第8章

多次元信号処理の基礎

像が動くとスペクトラムが斜めに傾くことを確認できる．ここでは，128 × 128 × 128 の 3 次元
FFT を使用した．周波数スペクトラムの表示については，例題 8.8 を参照されたい．
実習 8.5

大域的定速移動モデルのスペクトラム

M-file ： practice08̲5.m
大域的定速移動モデルの速度（方向，速さ）を変えてスペクトラムを観察してみよう．

8.5

多次元 Z 変換1 次元信号処理と同じように，多次元信号処理においても Z 変換が定義され，システムの解析や実現に大変有用である．
● 単位インパルス信号の重み付け表現
多次元信号もまた単位インパルス信号の重み付け和として表現される．
例題 8.14

単位インパルス信号の重み付け表現

次の 2 次元配列をインパルス信号の重み付けで表現してみよう．

L , x[ 00 ] = 3, x[ 10 ] = 4, x[ 20 ] = 5, L
L , x[ 10 ] = 6, x[ 11 ] = 7, x[ 12 ] = 8, L解
次のように表現される．

x[ n ] = L + 3δ [ n − [ 00 ] ] + 4δ [ n − [ 10 ] ] + 5δ [ n − [ 20 ] ] +L + 6δ [ n − [ 10 ] ] + 7δ [ n − [ 11 ] ] + 8δ [ n − [ 12 ] ]L
一般的には，

x[ n ] = ∑ x[ k ]δ [ n − k ]k∈Z Dのように表現される．
● 多次元 Z 変換の定義
多次元の Z 変換はX(z) = ∑ x[ n ]z−n, z ∈ C D …………………………………………………………………………（8.37）n∈Z Dと定義される．ただし，ベクトル z のベクトル m 乗は，

zm = z0m z1m L zDm−1 , z ∈ C D, m ∈ Z D ………………………………………………………………（8.38）
0

1

D −1

のように要素ごとのべき乗の積とする．C D は，D 次元複素ベクトル集合を意味している．式（8.37）の関係は単純にZ{x[ n ]} = X (z) ………………………………………………………………………………………（8.39）
8.5

多次元 Z 変換

207

とも表現される．表 8.1 に多次元 Z 変換の主な性質をまとめる．
単位インパルス信号の Z 変換

例題 8.15

k だけシフトしたインパルス信号 δ [ n − k]の Z 変換を求めてみよう．
解
Z 変換の定義と単位インパルス信号の性質より，

Z{δ [ n − k ]} = ∑ δ [n − k]z−n = z−kn∈Z D

信号の Z 変換

例題 8.16

例題 8.14 の配列を Z 変換してみよう．
解
例題 8.15 の結果と表 8.1 の線形性より，

X(z) =  + 3z− [ ] + 4 z− [ ] + 5 z− [ ] +  + 6 z − [ ] + 7 z − [ ] + 8 z − [ ] + 
0
0

1
0

2
0

0
1

1
1

2
1

=  + 3 + 4 z0−1 + 5 z0−2 +  + 6 z1−1 + 7 z0−1z1−1 + 8 z0−2z1−1 + のように表現される．
（1）逆 Z 変換
逆 Z 変換はコーシーの積分定理を用いて

x[ nn ] =0
1

1
X(zz )z0n −1z1n −1d z0 d z1 …………………………………………………………（8.40）( j 2π ) 2 ∫C ∫C
0

0
1

1

0

1

と導出される．ただし，簡単化のため，2 次元の場合について表示している．ここで C0，C1 は，原点を囲み，収束領域内で回る積分閉路である．
1 次元の逆 Z 変換と異なり，多次元では部分分数展開を利用できない場合が多く，解析的な計算はほとんど行われない．
（2）Z 変換と DSFT の関係
変数 z = e jω と置き換えることは，関数をT

X ( e jω ) = X(z) z=e ω …………………………………………………………………………………（8.41）
T

j Tのように評価していることを意味する．結果として，離散空間フーリエ変換（DSFT）が与えられる．
従って，表 8.1 の z を e jω と置き換えることで，DSFT の性質を表すこととなる．
T

表 8.1（a，b は定数）
多次元 Z 変換の性質

性 質
時空間領域
線形性
ax[n] + by[n]時空間シフト x[n − k]
周波数シフト e jω nx[n]畳み込み
x[n] ∗ y[n]
T
0

208

第8章

多次元信号処理の基礎

Z領域
aX(z)＋bY(z)z−kX(z)X(ze −jω )X(z)Y(z)T0● システムの伝達関数
線形シフト不変システム T {・}の性質は，そのインパルス応答 h [n] = T{ δ [ n]}によって決定される．

このインパルス応答の Z 変換，H ( z ) = Z{ h [ n ] }もまた，システムの解析や実現の上で有用である．この H(z)は，1 次元の場合と同じようにシステムの伝達関数と呼ばれる．表 8.1 の畳み込みの性質から，
信号 X(z)に対するシステム H ( z )の応答信号 Y ( z )は，H ( z ) X ( z )のように多変量多項式の積で与えられる．
多次元の伝達関数における z−n は遅延素子に相当するが，1 次元に比べてその実現コストが非常に大きくなる点に注意を要する．例えば，水平走査された画像を処理する場合，水平方向の遅延と垂直方向の遅延では，同じ一つの遅延でもコストがまったく異なる．垂直の遅延一つは水平遅延器，すなわち記憶素子を画像の幅の数だけ必要とする．さらに時間遅延は，1 画面分の記憶素子（フレーム・バッファ）を必要とする．
例題 8.17

フレーム差分処理

時間的に隣り合うフレーム間の差分を出力するシステムの伝達関数を求めてみよう．
解
映像信号 x[kn]に対するシステムの応答が，y[kn ] = T {x[kn ]} = x[ kn ] − x[ kn−1 ]となればよい．z = ( z 0, z 1, z T ) T とし，表 8.1 の時空間シフトの性質を用いると，システムの入出力
関係が
⎡0⎤
−⎢0⎥
Y (z) = X(z) − z ⎢⎣ 1 ⎥⎦ X(z) = (1 − z T−1 ) X(z)のように求まる．よって，

H(z) =Y (z)= 1 − zT−1
X(z)

章末問題
問題 8.1標本化行列の非一意性

標本化行列

⎛1
V =⎜
⎜
⎝0

1⎞
2⎟
1⎟
2⎠

によって与えられる標本化格子 LAT( V )を描いてみよう．任意のユニモジュラ整数行列 E を右から掛けたV̂ = VE

によって与えられる標本化格子 LAT( V̂ )も描き，前者と比較してみよう．ユニモジュラ整数行列 E に
章末問題

209

ついては，任意の整数 α ∈ Z を用いて

1 α 
E=
 0 ±1 と与えることができる．
問題 8.2

2 次元信号の周波数Ω ∈ R 2 の線形和で表現してみよう．
2 次元信号 x (p) = cos2 ( 4 π p 0 + 2 π p 1 )を 2 次元複素正弦波 e jΩΩ p，Ω
T

ただし，p = ( p 0, p 1 ) T とする．
問題 8.3基本周期内の要素数

任意の周期行列 N において，基本周期内のベクトル集合 N (N)の要素数が， | detN |  で与えられることを確かめてみよう．ただし，・ は，小数点以下切り捨てによる整数化を意味する．
問題 8.4

静止画像の周波数特性（MATLAB 演習）

任意の画像 x [ n ]に対して DFT を施し，周波数特性 X [ k ]を求めよう．そして，振幅特性 | X [ k ] | をそのままに，位相特性をすべてゼロ（∠ X [ k ] = 0）として逆 DFT を施し，画像を復元してみよう．また，
位相特性 ∠ X [ k ]をそのままに，振幅特性をすべて一定（| X [ k ] | ＝一定）として逆 DFT を施し，画像を復元してみよう．振幅特性と位相特性ではどちらが原画像の面影を残すか，比較してみよう．
問題 8.5

先鋭化フィルタの周波数応答

図 5.7（a）に示す 4 近傍ラプラシアン・フィルタと，図 5.10（b）に示す 4 近傍高域強調フィルタの周
波数応答を解析的に導いてみよう．
問題 8.62 次元標本化

標本化行列

 P
V = P

 3

P 
P 

3

により標本化された信号が，フーリエ変換（FT）領域でもつ周期を周期行列 U で表現してみよう．また，原画像が下図のように原点を中心とする半径 π / P の円で与えられる周波数サポート領域をもつと仮定して，標本化後の周波数特性を描いてみよう．

210

第8章

多次元信号処理の基礎

Ω0
半径

π
P

Ω1

問題 8.7

大域的定速移動モデル（MATLAB 演習）

例題 8.13 の大域的定速移動モデルの映像に対して，2 フレーム間の移動平均フィルタを時間方向に施してみよう．また，その周波数スペクトラムを確認しよう．
問題 8.8

多次元 Z 変換の性質

表 8.1 の多次元 Z 変換の各性質を証明してみよう．
問題 8.9システムの伝達関数

伝達関数
0 
  10  −  10  
  01  −  01  

−0

1
1   0 
1   0 
 1  
 0  H(z) =  1 + z
 −  z + z  0  
 + z +z2
4
4をもつ 3 次元線形シフト不変システムについて，ω T = ( 0, 0, 0 ), ( π, 0, 0 ), ( 0, π, 0 ), ( 0, 0, π )，および( π, π, π )における周波数応答 H (e jωω )を求めてみよう．
T

参考文献（1）吹抜敬彦； TV 画像の多次元信号処理，日刊工業新聞社，1988 年．
（2）D. E. Dudgeon and R. M. Mersereau ； Multidimensional Digital Signal Processing，Prentice Hall，1983．
（3）Yao Wan, J orn Ostermann Ya-Qin Zhang ； Video Processing and Communications，Prentice Hall，2001．
（4）John, W. Woods ； Multidimensional Signal, Image and Video Processing and Coding，Academic Press，2006．

章末問題

211

第9章

多次元線形システム設計

本章では，多次元線形フィルタ，特に FIR フィルタの設計法をいくつか紹介する．また，1 次元マルチレート信号処理の議論を多次元に拡張し，さまざまなサンプリング格子を扱う多次元マルチレート信号処理の構成要素について解説しよう．多次元マルチレート信号処理においては，多次元フィルタに加えて，多次元ダウン・サンプラと多次元アップ・サンプラが基本的な構成要素となる．

9.1

多次元フィルタ設計

以下では，多次元線形フィルタの具体的な設計法について，プログラム例を交えながら紹介しよう．まず，準備として FIR フィルタと IIR フィルタについて復習しておこう．
● FIR フィルタと IIR フィルタ
FIR（有限インパルス応答）フィルタは，インパルス応答のサポート領域が有限の範囲に収まるフィルタであり，IIR（無限インパルス応答）フィルタは，インパルス応答のサポート領域が無限に広がるフィルタである．IIR フィルタに対する FIR フィルタの特徴を以下にまとめる注 9-1．
• 常に安定である．IIR フィルタは係数によっては不安定となる．
• 量子化誤差の影響が少ない．IIR フィルタはフィードバックによる累積誤差が問題となる．
• 所望の振幅特性を得るためのフィルタ次数が IIR フィルタより高くなり，フィルタリングのための計算量が多い．
（1）システムの安定性
線形シフト不変システムの安定性の条件の一つに「BIBO 安定」がある．BIBO 安定のシステムでは，有界な入力 | x [n] | < ∞ に対し，有界な出力 | y [ n] | < ∞ を得る．この BIBO 安定の必要十分条件は，システムのインパルス応答 h [ n]によって

注 9-1 ：川又政征，樋口龍雄 著，「多次元ディジタル信号処理」（1995 年，朝倉書店 刊）を参照．

9.1

多次元フィルタ設計

213

1

ω0
ω c0
−ω c1
−ω c0

図 9.1

ω c1
ω1

方形理想低域通過フィルタの振幅応答∑ | h[n] | < ∞ …………………………………………………………………………………………（9.1）

n∈Z Dのように表現できる．有限な値の係数をもつ FIR システムは，常に安定している．
（2）Shanks の安定定理
分母のみが多項式となっている特殊な 2 次元システム

H(z) =

1=h[ n ]z−n ……………………………………………………………………………（9.2）
D(z) n∑∈Z2が安定であるための必要十分条件は，| z 0 | > 1 かつ | z 1 | > 1 の任意の z = ( z 0, z 1 ) T に対して，

D(z) ≠ 0 …………………………………………………………………………………………………（9.3）となることである．分母分離型（D (z)が可分離）の場合，2 次元の安定判別は 1 次元の問題に帰着する．
一方で，分子多項式 N (z)のある一般的な IIR フィルタ

H(z) =N (z)……………………………………………………………………………………………
（9.4）
D(z)

の場合，分子多項式 N (z)が安定性に影響するため，その安定判別は容易ではない．
● フィルタ仕様
具体的なフィルタ設計法について紹介する前に，設計手順および理想フィルタについてまとめておこう．
（1）設計手順
フィルタ設計においては，まず，設計仕様を与える．設計仕様には，所望の特性や実現規模などがある．次に，所望の特性を近似することで実現可能な伝達関数を求める．最後に，フィルタ構造を決定し，ソフトウェアあるいはハードウェアとして実現する．この手続きのうち，近似の作業が最も重要である．
次に，設計仕様を与える際の所望特性として，しばしば利用される方形理想低域通過フィルタと円対称理想低域通過フィルタを紹介しよう．
（2）方形理想低域通過フィルタ
図 9.1 に 2 次元方形理想低域通過フィルタの振幅応答を示す．ゼロ位相を仮定すると，多次元の方
形理想低域通過フィルタの周波数応答は，任意の正の実数 ωcd に対して，
214

第9章

多次元線形システム設計

1
H I (e jω ) = 0T| ω d | ≤ ω cd…………………………………………………………………………
（9.5）

その他

と定義される．また，インパルス応答は，周波数応答の逆離散空間フーリエ変換（IDSFT）
として

hI [ n] =sin ω c0 n 0 sin ω c1 n1 sin ω cD−1 n D−1 D−1 ω c d
ω
1
jω n
dω =
⋅
L
=∏
sin c  c d n d D ∫ω ∈[−ω , ω ) e
(2π )
π n0
π n1
π n D−1
π
π
d =0
T

cd

cd

D

……（9.6）のように与えられる．ここで，ω = (ω 0, ω 1, L, ω D−1)T である．
例題 9.1方形理想低域通過フィルタ

ω c 0 = ω c 1 = π/3 として，2 次元の方形理想低域通過フィルタのインパルス応答を描いてみよう．
解
以下に，MATLAB 上でのコマンド例を示そう．
% カットオフ周波数の設定
fc0 = 1/3; % 垂直(×π rad)fc1 = 1/3; % 水平(×π rad)% 表示範囲の設定
region = 20;% インパルス応答の計算[iHorizontal,iVertical] = ...
meshgrid(-region:region,-region:region);r0 = (fc0)*sinc((fc0)*iVertical);
r1 = (fc1)*sinc((fc1)*iHorizontal);
idealFilter = r0 .* r1;% インパルス応答の表示
mesh(iHorizontal,iVertical,idealFilter);xlabel('n_1');
ylabel('n_0');
図 9.2 に MATLAB による計算結果を示す．ただし，インパルス応答が無限に広がるため，原点を中心とした周辺のみの応答を示している．
実習 9.1方形理想低域通過フィルタ

M-file ： practice09̲1.m
カットオフ周波数 ω c 0，ω c 1 を変えたときのインパルス応答を確認してみよう．

9.1

多次元フィルタ設計

215

0.1
0.08
0.06
0.04
0.02
0
−0.02
−0.04
20
10

20
0

n0

0

−10

−10

−20 −20

図 9.2

10

n1

方形理想低域通過フィルタのインパルス応答の例

1

ωc

ω0

−ω c

ωc

−ω c

図 9.3

ω1

円対称理想低域通過フィルタの振幅応答（3）円対称理想低域通過フィルタ
図 9.3 に円対称理想低域通過フィルタの振幅応答を示す．ゼロ位相を仮定すると，円対称理想低域
通過フィルタの周波数応答は

1
ω 02 + ω 12 < ω c2
H I (e jω ) = ………………………………………………………………………
（9.7）
その他
0
のように定義される．ここでは，議論を 2 次元の場合に限定する．インパルス応答は，周波数応答のT

逆離散空間フーリエ変換（IDSFT）
として

h I [n] =
=

216

第9章

ω 2π
1
1
1 ω
ω e jω n +n cos(θ −φ )dφ dω =
ω J0 ω n02 + n12 dωe jω n dω =2π ∫0(2π ) 2 ∫ω +ω ≤ω(2π ) 2 ∫0 ∫0
c

T

2
0

(

2
1

2
c

2

2

ω c J1 ω c n0 + n1⋅
2πn02 + n12)多次元線形システム設計

2
0

2
1

c

(

)

n ≠ 0 ………………………………………………………………（9.8）

0.1
0.08
0.06
0.04
0.02
0
−0.02
20
10

20
0

n0

0

−10
−20 −20

−10

10

n1

図 9.4 円対称理想低域通過フィルタのインパルス応答の例

hI [ 0 ] =ωc ωc⋅………………………………………………………………………………………
（9.9）
2π
2

のように与えられる．ここで，Jn (x)は，n 次の第 1 種 Bessel 関数である．
例題 9.2円対称理想低域通過フィルタ

ω c = π/3 として，円対称理想低域通過フィルタのインパルス応答を描いてみよう．
解
以下に，MATLAB 上でのコマンド例を示そう．
% カットオフ周波数の設定
fc = 1/3; % (×π rad)% 表示範囲の設定
region = 20;% インパルス応答の計算[iHorizontal,iVertical] = ...
meshgrid(-region:region,-region:region);r = sqrt(iHorizontal.^2+iVertical.^2);
iOrg = find(r==0);r(iOrg) = 1;
idealFilter = (fc/2)*besselj(1,pi*fc*r)./r;
9.1

多次元フィルタ設計

217

idealFilter(iOrg) = pi*fc^2/4;% インパルス応答の表示
mesh(iHorizontal,iVertical,idealFilter);xlabel('n_1');
ylabel('n_0');
図 9.4 に結果を示す．ただし，インパルス応答が無限に広がるため，原点を中心とした周辺のみの応答を示している．
実習 9.2円対称理想低域通過フィルタ

M-file ： practice09̲2.m
カットオフ周波数 ω c を変えたときのインパルス応答を確認してみよう．
● 近似仕様所望の特性の近似を行うためには近似仕様を定めなければならない．近似仕様を与える対象の例
を以下にまとめる．
インパルス応答： h [ n ]周波数応答： H ( e jω )T

- 振幅応答： | H ( e jω ) |T- 位相応答： ∠ H ( e jω )T∂∠H(e jω )∂ω dTもしくは，群遅延特性： −（1）振幅応答2 次元の場合について，振幅特性の通過域を設定する際の典型的な近似仕様を図 9.5 に示す．また，低域通過型フィルタの近似仕様を与える際の領域設定の例を図 9.6 に示す．図 9.6 において，Rp は通過域を意味しており，この領域内では許容誤差 δp を用いて次のように振幅応答が設定される．

1 − δ p ≤ | H(e jω ) | ≤ 1 + δ p, ω ∈ Rp
T…………………………………………………………………
（9.10）

また，Rs は阻止域を意味しており，この領域内では許容誤差 δs を用いて次のように振幅応答が設定される．

| H(e jω ) | ≤ δs, ω ∈ Rs
T………………………………………………………………………………
（9.11）

最後に，Rt は遷移域を意味しており，これは振幅応答の仕様を設定しない領域である．
（2）位相応答
位相応答に与えられる仕様として，例えば線形位相特性がある．画像処理の応用では，振幅ひずみに比べて位相ひずみの方が知覚しやすく，線形位相特性は音声信号処理に比べて重要な性質である．
線形位相フィルタでも特にゼロ位相フィルタが画像処理において頻繁に利用される．インパルス
応答 h [ n ]が
218

第9章

多次元線形システム設計

π

π

π

−π

π

−π

π

−π

−π

−π

−π

（a）低域通過型（b）高域通過型（Ⅰ）（c）高域通過型
（Ⅱ）

π

π

π

π

−π

図 9.5

π

π

−π

π

−π

−π

−π

−π

（d）帯域通過型（e）帯域阻止型（f）ファン通過型

典型的な通過域の仕様
π
Rs

Rt

π

−π

Rp
−π

図 9.6 典型的な近似仕様

h[ n ] = h[ − n ], n ∈ Z D………………………………………………………………………………
（9.12）のように原点を中心として対称性を持てばゼロ位相特性となる．この周波数応答は，H (e jω ) = ∑ h[n]e− jω n = h[ 0 ] +
T

T

n∈Z D

∑

n∈Z D , n ≠ 0, n0 ≥0h[n]( e jω n + e− jω n ) = h[ 0 ] +TT∑n∈Z D , n ≠ 0, n0 ≥0h[n]2 cos ω T n……（9.13）のように実数となる．

9.2

FIR フィルタ設計

以下では，常に安定している FIR フィルタの設計を中心に解説を進めよう．
9.2

FIR フィルタ設計219

● 分離設計法
多次元フィルタを可分離として設定すると，そのインパルス応答 h [ n ]，および周波数応答 H ( e jω )Tは，次式のように各次元に対応する 1 次元フィルタの積として与えられる．
D−1h[ n ] = ∏ h d [ n d ] ………………………………………………………………………………………（9.14）
d =0

D−1

H (e jω ) = ∏ Hd ( e jω ) ………………………………………………………………………………（9.15）
T

d

d =0

従って，可分離の多次元フィルタ設計は各次元の 1 次元フィルタの設計に帰着できる．それぞれに近似仕様を与えることで，数多く存在する設計手法を直接適用可能である．
各 1 次元フィルタが線形位相特性をもつ場合，多次元フィルタもまた線形位相特性をもつ．ただし，1 次元で与えた振幅応答の仕様が，多次元において直接対応しないことに注意する．例えば 2 次元フィルタの場合について説明しよう．各次元の通過域誤差を δ p d，阻止域誤差を δ s d とすると，与えられる多次元フィルタの通過域の誤差は，

δ p = (1 + δ p0 )(1 + δ p1 ) − 1 ……………………………………………………………………………（9.16）
阻止域の誤差は，

δ s = max(δ s0 (1 + δ p1), (1 + δ p0 )δ s1) …………………………………………………………………（9.17）となる．
例題 9.3

可分離フィルタ設計

以下の近似仕様を満たす 2 次元可分離フィルタを設計しよう．
• 通過域： | ω d | < π/3 − π/10，d = 0, 1
• 通過域許容誤差： δ p = 0.01
• 阻止域： | ω d | > π/3 + π/10，d = 0, 1
• 阻止域許容誤差： δ s = 0.01

解
各次元のフィルタの通過域許容誤差を δ pd = √1￣+ δ p −￣≒
1 0.00499，阻止域許容誤差を δ sd = δ s/(1 +δ p ( 1−d ) )≒ 0.00995 と設定すればよい．この仕様から，firpm 関数で設計することを前提とすると，
firpmord 関数より 1 次元フィルタの近似次数 21 が求められる．タップ数が奇数となるように次数を 22（タップ数 23）と設定しよう．以下に，MATLAB 上でのコマンド例を示す．
% カットオフ周波数
fc0 = 1/3; % 垂直(×π rad)fc1 = 1/3; % 水平(×π rad)% 通過域の仕様
passEdge0 = fc0-1/10; % 垂直(×π rad)passEdge1 = fc1-1/10; % 水平(×π rad)
220

第9章

多次元線形システム設計

% 阻止域の仕様
stopEdge0 = fc0+1/10; % 垂直(×π rad)stopEdge1 = fc1+1/10; % 水平(×π rad)% 許容誤差の仕様
deltaPass = 0.01;
deltaStop = 0.01;% 各次元の許容誤差の仕様
deltaPass0 = sqrt(1+deltaPass)-1;
deltaStop0 = deltaStop/(1+deltaPass0);
deltaPass1 = sqrt(1+deltaPass)-1;
deltaStop1 = deltaStop/(1+deltaPass1);% フィルタ H_0 の近似仕様
specFrq0 = [passEdge0 stopEdge0];
specAmp0 = [1 0];
specErr0 = [deltaPass0 deltaStop0];
spec0 = firpmord(specFrq0,specAmp0,specErr0,2,'cell');% フィルタのタップ数が奇数となるように修正
if (mod(spec0{1},2)~=0)
spec0{1}=spec0{1}+1;
end
halfOrder0 = spec0{1}/2;% フィルタ H_1 の近似仕様
specFrq1 = [passEdge1 stopEdge1];
specAmp1 = [1 0];
specErr1 = [deltaPass1 deltaStop1];
spec1 = firpmord(specFrq1,specAmp1,specErr1,2,'cell');% フィルタのタップ数が奇数となるように修正
if (mod(spec1{1},2)~=0)
spec1{1}=spec1{1}+1;
end
halfOrder1 = spec1{1}/2;% 各次元のフィルタ設計
oneDimensionalFilter0 = firpm(spec0{:});
oneDimensionalFilter1 = firpm(spec1{:});% フィルタ特性の表示
figure(1); impz(oneDimensionalFilter0);
9.2

FIR フィルタ設計

221

figure(2); freqz(oneDimensionalFilter0);
figure(3); impz(oneDimensionalFilter1);
figure(4); freqz(oneDimensionalFilter1);% 可分離 2次元フィルタ
twoDimensionalFilter = ...
kron(oneDimensionalFilter1(:).',...
oneDimensionalFilter0(:));
figure(5);mesh(-halfOrder1:halfOrder1,...
-halfOrder0:halfOrder0,...
twoDimensionalFilter);
figure(6);freqz2(twoDimensionalFilter);xlabel('\omega_1 (\times \pi rad)');ylabel('\omega_0 (\times \pi rad)');
図 9.7（a），（b）に設計した 1 次元フィルタのインパルス応答と振幅応答を示し，図 9.7（c），（d）に 2 次元フィルタのインパルス応答と振幅応答を示す．
Image Processing Toolbox がない場合には freqz2 関数を利用できないため，代わりに本書で用意した freqz2cq 関数を利用してほしい．
実習 9.3

可分離フィルタの設計

M-file ： practice09̲3.m
設計仕様を変えてさまざまな可分離 2 次元フィルタを設計してみよう．
● 窓関数法先に示した方形理想低域通過フィルタや円対称理想低域通過フィルタは無限に広がるインパルス応答をもつため実現不可能である．そこで，窓関数法では，インパルス応答に窓関数を掛け，有限な範囲で打ち切ることで，理想フィルタを近似した FIR フィルタを設計する．以下では，分離型と対照型の二つの窓関数法について解説しよう．
（1）分離型
分離型は，分離可能な窓関数を用いて，次式のように理想フィルタのインパルス応答 h I [ n ]を有限で打ち切る．

 D−1h[ n ] =  ∏ WN (nd ) ⋅ hI [ n ] d =0

d

222

第9章

多次元線形システム設計

20
0

0.35

信号強度

0.3
0.25

振幅

0.2

−20
−40
−60
−80

0.15
0.1

0

0.2
0.4
0.6
0.8
正規化した周波数[× π rad/サンプル]

1

0

0.2
0.4
0.6
0.8
正規化した周波数[× π rad/サンプル]10

位相[ °]

0.05
0
−0.05
−0.1
0

5

10
15
n [サンプル]

−500

−1000

20

（a）1次元インパルス応答（b）1次元周波数応答

0.1

振幅

0.05
0

0.6
0.4
0.2
0
1

10
0

n0

−10

−15

−10

−5

0

5

10

n1

（c）2次元インパルス応答

図 9.7

1.2
1
0.8

15

0.5

0
ω 0 [×π rad] −0.5

−1 −1

−0.5

0

0.5

ω 1 [×π rad]（d）2次元振幅応答

可分離フィルタの設計例

ここで，WN (n)は 1 次元の窓関数であり，N は応答を打ち切る長さを決めるパラメータである．
例題 9.4

カイザー窓による分離型設計

方形理想低域通過フィルタから，例題 9.3 と同じ近似仕様を満たす 2 次元フィルタを分離型窓関数法により設計しよう．
解
各次元の通過域許容誤差と阻止域許容誤差は例題 9.3 と同じように設定すればよい．この仕様から，MATLAB の kaiserord 関数を用いて窓関数の長さと β パラメータを計算すると，それぞれ
27 と 4.093 のように求められる．タップ数が奇数となるように，次数を 28（タップ数 29）と設定しよう．以下に，MATLAB 上でのコマンド例を示す．なお，例題 9.3 の解答例と重複する部分については省略している．

9.2

FIR フィルタ設計223

1

% フィルタ H_0 の近似仕様[n0,Wn0,beta0,typ0] = kaiserord(...
specFrq0,specAmp0,specErr0,2);% フィルタのタップ数が奇数となるように修正
if (mod(n0,2)~=0)
n0=n0+1;
end
halfOrder0 = n0/2;% フィルタ H_1 の近似仕様[n1,Wn1,beta1,typ1] = kaiserord(...
specFrq1,specAmp1,specErr1,2);% フィルタのタップ数が奇数となるように修正
if (mod(n1,2)~=0)
n1=n1+1;
end
halfOrder1 = n1/2;% 各次元のフィルタ設計
oneDimensionalFilter0 = fir1(...
n0,Wn0,typ0,kaiser(n0+1,beta0),'noscale');oneDimensionalFilter1 = fir1(...
n1,Wn1,typ1,kaiser(n1+1,beta1),'noscale');% 可分離 2次元フィルタ
twoDimensionalFilter = ...
kron(oneDimensionalFilter1(:).',...
oneDimensionalFilter0(:));
図 9.8（a），（b）に設計したフィルタのインパルス応答と振幅応答を示す．
Image Processing Toolbox の fwind1 関数に所望の周波数応答，垂直方向 1 次元窓関数および水平方向 1 次元窓関数を与えると，この分離型窓関数法によって 2 次元フィルタを生成する．
実習 9.4

分離型窓関数法

M-file ： practice09̲4.m
近似仕様を変えて，さまざまなフィルタを設計してみよう．

224

第9章

多次元線形システム設計

0.1

振幅

0.05
0
10
0

n0

−10

−15

−10

−5

0

5

10

n1

（a）2次元インパルス応答

15

1.2
1
0.8
0.6
0.4
0.2
0
1

0.5

0
ω 0 [× π rad] −0.5

−1 −1

−0.5

0

1

0.5

ω 1 [×π rad]（b）2次元振幅応答

図 9.8 分離型窓関数法によるフィルタの設計例（2）対称型
対称型では，1 次元の窓関数を用いて次式のように理想フィルタのインパルス応答を有限に打ち切る．

h[ n ] = WN ( || n || ) h I [ n ]22
ただし，|| n || は二乗ノルムであり，2 次元の場合は || n || = √n￣
0 + n 1 となる．N は応答を打ち切る長さを決めるパラメータである．
例題 9.5カイザー窓による対称型設計

円対称理想低域通過フィルタから，次の近似仕様を満たす 2 次元フィルタを対称型窓関数法により設計しよう．
2
2• 通過域：√￣ω
0 + ω 1 < π/3 − π/10

• 通過域許容誤差： δ p = 0.01
22￣
ω
• 阻止域：√
0 + ω 1 > π/3 + π/10

• 阻止域許容誤差： δ s = 0.01解対称型の場合，仕様で与えられた通過域許容誤差と阻止域許容誤差を直接利用して窓関数の近似次数を求められる．この仕様から，MATLAB の kaiserord 関数などを用いて窓関数の長さと β
パラメータを計算すると，それぞれ 22 と 3.395 のように求められる．タップ数が奇数となるように次数を 24（タップ数 25）と設定しよう．以下に，MATLAB 上でのコマンド例を示す．
% カットオフ周波数
fc = 1/3; % (×π rad)% 通過域の仕様
9.2

FIR フィルタ設計

225

passEdge = fc-1/10; % (×π rad)% 阻止域の仕様
stopEdge = fc+1/10; % (×π rad)% 許容誤差の仕様
deltaPass = 0.01;
deltaStop = 0.01;% フィルタ H の近似仕様
specFrq = [passEdge stopEdge];
specAmp = [1 0];
specErr = [deltaPass deltaStop];[n,Wn,beta,typ] = kaiserord(...
specFrq,specAmp,specErr,2);% 窓長が奇数となるように次数を偶数に修正
if (mod(n,2)~=0)
n=n+1;
end
halfOrder = n/2;
% 窓関数と理想フィルタの設定[iHorizontal,iVertical] = ...
meshgrid(-halfOrder:halfOrder,...
-halfOrder:halfOrder);r = sqrt(iHorizontal.^2+iVertical.^2);
w = contKaiser(r,halfOrder,beta);
iOrg = find(r==0);r(iOrg) = 1;
idealFilter = (fc/2)*besselj(1,pi*fc*r)./r;
idealFilter(iOrg) = pi*fc^2/4;% 2 次元フィルタの計算
twoDimensionalFilter = w .* idealFilter;
図 9.9（a），（b）に設計したフィルタのインパルス応答と振幅応答を示す．なお，上のコマンド例
では次の contKaiser 関数

function y = contKaiser(x,halfOrder,beta);%
if (abs(x) > halfOrder)
226

第9章

多次元線形システム設計

0.1
0.08
0.06

振幅

0.04
0.02
0
−0.02
10
0

n0

−10

−15

−10

−5

0

5

10

n1

15

1.2
1
0.8
0.6
0.4
0.2
0
1

0.5

0
ω 0 [×π rad] −0.5（a）2次元インパルス応答

−1 −1

−0.5

0

0.5

1

ω 1 [×π rad]（b）2次元振幅応答

図 9.9 対称型窓関数法によるフィルタの設計例

y = 0;else
y = besseli(0,beta*sqrt(1-(x/halfOrder).^2))/...
besseli(0,beta);
endを利用している．
Image Processing Toolbox の fwind1 関数に所望の周波数応答と一つの 1 次元窓関数を与えると，この対照型窓関数法によって 2 次元フィルタを生成する．また，直接 2 次元の窓関数を与えてフィル
タを設計する fwind2 関数も用意されている．
実習 9.5対称型窓関数法

M-file ： practice09̲5.m
近似仕様を変えて，さまざまなフィルタを設計してみよう．
● マクレラン変換法
マクレラン変換（McClellan Transform）によって，1 次元 FIR フィルタから多次元 FIR フィルタを得ることができる．マクレラン変換の手続きは以下のとおりである．
1．1 次元ゼロ位相 FIR フィルタを設計
2．変数変換をとおして多次元に変換
特徴は以下のとおりである．
• 1 次元フィルタの設計手法が直接役立つ• 効果的な実現法が存在する
9.2

FIR フィルタ設計

227

（1）原理では，原理について説明しよう．まず，タップ数が 2N + 1 の 1 次元のゼロ位相 FIR フィルタ h [ n ]を仮定する．このフィルタの周波数特性 H ( e jω )は，次式のように余弦波の 1 次結合として表される．
N

N

n =0

n =0

H(e jω ) = ∑ a[ n ]cos ω n =∑ a[ n ]Tn{ cos ω } …………………………………………………………（9.18）
ただし，⎧ h[ 0 ]a[ n ] = ⎨⎩ 2 h[ n ]

n=0

n>0

………………………………………………………………………………
（9.19）

式（9.18）における T n { x }はチェビシェフ多項式と呼ばれ，cos ω n を cos ω の n 次の多項式で表現することを可能とする．チェビシェフ多項式は，

T0{x} = 1

T1{x} = x…

T2{x} = 2x2 − 1
Tn{x} = 2 xTn−1{x} − Tn−2{x} …………………………………………………………………………（9.20）と与えられる．
次に，チェビシェフ多項式の変数となっている cos ω を多次元の周波数特性 F ( e jω )で置き換えてしT

まう．この変換によって与えられる多次元フィルタの周波数特性は，N

H (e jω ) = ∑ a[ n ]Tn{F(e jω )} ………………………………………………………………………（9.21）
T

T

n =0

となる．
（2）2 次元フィルタ設計
2 次元フィルタを得るための F( e jω )の例を以下に示そう．
T

F(z) = A +1
1
1
1
B(z11 + z1−1 ) + C (z01 + z0−1 ) + D(z11 z0−1 + z1−1 z01 ) + E (z11 z01 + z1−1 z0−1 ) ……………（9.22）
2
2
2
2

として，

F (e jω ) = F (z) z=e ω = A + B cos ω 1 + C cos ω 0 + D cos(ω 1 − ω 0 ) + E cos(ω 1 + ω 0 ) ………………（9.23）
T

j Tを得る．ただし，z = (z 0, z 1)T，ω = (ω 0, ω 1)T である．

このフィルタのパラメータ A，B，C，D，E の選択によって疑似円対称低域通過フィルタやファン・フィルタの設計が可能となる．以下に，疑似円対称低域通過フィルタを設計する場合のパラメータの一例を示そう．

1
1
1
A = − , B = C = , D = E = ………………………………………………………………………（9.24）
2
2
4
この選択により，1 次元ゼロ位相 FIR フィルタの周波数応答 H( e jω )が図 9.10 に示す等位線に沿って，2 次元の周波数応答 H ( e jω )に写像される．
T

228

第9章

多次元線形システム設計

−0.9510.8
0.6

ω 0 [×π rad]

0.4
0.2

0.588

0

0.951
0.809

0
−0.309−0.588

−0.2

0.309

−0.4
−0.809−0.6−0.8

図 9.10
マクレラン変換の等位線（数値は cos ω の値）

−1
−1

−0.5

0

0.5

ω 1 [× π rad]

×

X (z)

F (z)

2 F (z)

a [0]

−
＋

a [1]
＋

図 9.112 F (z)−＋a [N −1]＋a [N ]＋

Y (z)マクレラン変換による非分離フィルタの効果的実現法（3）効果的実現法
マクレラン変換によって設計されたフィルタは非分離型のフィルタとなるが，図 9.11 に示すような効果的な構成によって，一般的な非分離フィルタよりも少ない演算量で実現可能である．以下に，
マクレラン変換によって設計される非分離フィルタの効果的実現法を MATLAB 関数として掲載しよう．
function y = ...
mcClellanTransConv2(h, x, trans, shape);% マクレラン変換フィルタの効果的実現%% y = mcClellanTransConv2(h,x,trans,shape)%
9.2

FIR フィルタ設計

229

% 入力
%

h :1 次元線形位相原型フィルタ%

x :入力 2次元配列%

trans : マクレラン変換係数%

shape : conv2 関数に直接渡される出力形状%(デフォルト'full')

%
% 出力
%

y :出力 2次元配列

%
% 参考
%

conv2

%
% 1 次元フィルタの折り返し係数計算
h = h(:);
halfOrder = (length(h)-1)/2;
a = [h(halfOrder+1); 2*h(halfOrder+2:end)];% 初段の計算
delay = [0 0 0; 0 1 0; 0 0 0]; % 位相調整用
x0 = conv2(delay, x, shape);x1 = conv2(trans, x, shape);% F(z)

x2 = a(1)*conv2(delay, x, shape); % a[0]% 2 段目以降の計算（プライベート関数の呼び出し）for i=2:halfOrder[x0, x1, x2] = ...
mcClellanTransModule(...
x0, x1, x2, trans, a(i), shape);end% 最終段の計算
y = a(halfOrder+1)*x1 + x2;% プライベート関数: マクレラン変換モジュール
function [y0,y1,y2] = ...
mcClellanTransModule(...
x0, x1, x2, trans, a, shape);%
delay = [0 0 0; 0 1 0; 0 0 0]; % 位相調整用
230

第9章

多次元線形システム設計

y0 = conv2(delay, x1, shape);
y1 = -conv2(delay, x0, shape)...
+ 2.0*conv2(trans,x1, shape); % 2F(z)y2 = conv2(delay, (a*x1)+x2, shape);
例題 9.6

マクレラン変換法

以下の近似仕様を満たす 1 次元ゼロ位相 FIR フィルタからマクレラン変換によって 2 次元ゼロ位
相 FIR フィルタを設計しよう．
通過域： |ω | < π/3 − π/10
通過域許容誤差： δp = 0.01
阻止域： |ω | > π/3 + π/10
阻止域許容誤差： δs = 0.01
解与えられた仕様から，firpmord 関数を用いて 1 次元ゼロ位相 FIR フィルタの近似次数を計算す
ると，19 と求められる．タップ数が奇数となるように次数を 20（タップ数 21）と設定しよう．以下に，MATLAB 上でのコマンド例を示す．
% 1 次元ゼロ位相 FIR フィルタの準備%% カットオフ周波数
fc = 1/3; % (×π rad)%% 通過域の仕様
passEdge = fc-1/10; % (×π rad)%% 阻止域の仕様
stopEdge = fc+1/10; % (×π rad)%% 許容誤差の仕様
deltaPass = 0.01;
deltaStop = 0.01;%% 1 次元フィルタの近似仕様
specFrq = [passEdge stopEdge];
specAmp = [1 0];
specErr = [deltaPass deltaStop];
spec = firpmord(...
specFrq,specAmp,specErr,2,'cell');% フィルタのタップ数を奇数に修正
if (mod(spec{1},2)~=0)
spec{1}=spec{1}+1;
9.2

FIR フィルタ設計

231

end
halfOrder = spec{1}/2;
h = firpm(spec{:});% 疑似円対称低域通過フィルタ用パラメータparams.A = -1/2;
params.B = 1/2;
params.C = 1/2;
params.D = 1/4;
params.E = 1/4;
% 等位線の計算
nPoints = 64;[f1 f0] = freqspace(nPoints);[w1 w0] = meshgrid(pi*f1,pi*f0);
g = mcClellanTrans(w1, w0, params);% 等位線の表示
figure(1);c = contour(...
f1, f0, g, [cos(0.1*pi:0.1*pi:0.9*pi)]);clabel(c);xlabel('\omega_1 (\times \pi rad)');ylabel('\omega_0 (\times \pi rad)');pbaspect([1 1 1]);% 2 次元フィルタ設計
T = [ params.D params.B params.E;
params.C 2*params.A params.C;
params.E params.B params.D]/2;
delta = 1; % インパルス入力
twoDimensionalFilter = ...
mcClellanTransConv2(h, delta, T, 'full');
図 9.12 に設計した 2 次元フィルタのインパルス応答と振幅応答を示す．
Image Processing Toolbox では，マクレラン変換法を ftrans2 関数によって提供している．
実習 9.6

マクレラン変換設計

M-file ： practice09̲6.m
232

第9章

多次元線形システム設計

0.1

1.4

0.08

1.2
1

0.04

0.8

振幅

0.06
0.02

0.4

0
−0.02
10

0.6
0.2

5

0
−5

n0

−10 −10

−5

0

5

n1

10

0
1

0.5

0
ω 0 [×π rad] −0.5（a）2次元インパルス応答

図 9.12

−1 −1

−0.5

0

1

0.5

ω 1 [×π rad]（b）2次元振幅応答

マクレラン変換による疑似円対称低域通過フィルタの設計例

各種パラメータを変更し，マクレラン変換法を利用してさまざまな疑似円対称低域通過フィル
タを設計してみよう．
例えば，1 次元高域通過フィルタをもとに 2 次元フィルタを設計してみよう．
● 各種変換法
ここでは，図 9.5（a）に示す低域通過フィルタから図 9.5（b）〜（d）に示すようなフィルタを設計する
手法についてまとめておこう．ただし，便宜上 H ( z )は，通過域の利得が 1 で，ゼロ位相特性をもつ
低域通過フィルタの伝達関数と仮定する．
（1）高域通過型（Ⅰ）
高域通過型（Ⅰ）の伝達関数 F( z )は，低域通過フィルタ H(z )の伝達関数より

F ( z ) = 1 − H ( z ) ………………………………………………………………………………………（9.25）と与えることができる．それぞれのインパルス応答は，f [ n ] = δ [ n ] − h[ n ] ……………………………………………………………………………………（9.26）のように関係する．この変換により，通過域と阻止域が反転する．
（2）高域通過型（Ⅱ）
高域通過型（Ⅱ）の伝達関数 F(z)は，低域通過フィルタ H(z)の伝達関数より

F ( z ) = H ( − z ) …………………………………………………………………………………………（9.27）と与えることができる．それぞれのインパルス応答は，f [ n ] = ( − 1) n h[ n ] ……………………………………………………………………………………（9.28）のように関係する．(−1)は，要素がすべて−1 のベクトルである．2 次元の場合，(−1)n = (−1) n 0 (−1) n 1 となる．この変換は，各次元独立に π 変調を施すことにほかならない．
（3）帯域通過型
高域通過型の伝達関数 F(z)は，低域通過型フィルタ H(z)の伝達関数より
9.2

FIR フィルタ設計233

F ( z ) = H ( − z2 I ) ………………………………………………………………………………………（9.29）と与えることができる．それぞれのインパルス応答は，f [ n ] = [(−1) n h[ n ]] ↑2I………………………………………………………………………………
（9.30）のように関係する．ただし，[ x [ n ] ] ↑2I は，信号 x [ n ]に対して各次元独立に補間率 2 のアップ・サンプ
リング（ゼロ値挿入）を施すことを意味する．すなわち，この変換は各次元独立に π 変調を施し，その後，アップ・サンプリングすることにほかならない．
（4）帯域阻止型
高域阻止型の伝達関数 F ( z )は，低域通過フィルタ H( z )の伝達関数より

F ( z ) = 1 − H ( − z2 I )…………………………………………………………………………………
（9.31）と与えることができる．それぞれのインパルス応答は，f [ n ] = δ [ n ] − [(−1) n h[ n ]] ↑2I …………………………………………………………………………（9.32）のように関係する．これは，帯域通過フィルタへの変換の後に，通過域と阻止域を反転することを意味する．
なお，本書で紹介した設計法のほかにも，周波数標本化法（Image Processing Toolbox の fsamp2関数）や最適化設計法など，1 次元フィルタ設計と同じように行える多次元 FIR フィルタ設計法が存
在する．

9.3

多次元標本化格子変換

第 6 章では，画像の拡大・縮小処理について解説した．そこでは分離処理のみを扱っていたが，こ
こではより一般的な多次元標本化格子変換処理について解説しよう．まず，多次元標本化格子変換に欠かせない二つの基本要素である多次元ダウン・サンプラと多次元アップ・サンプラについて紹介する．
● 多次元ダウン・サンプラ
以下では，多次元ダウン・サンプラについて，可分離処理と非分離処理に分けて解説する．
（1）可分離処理
分離可能な多次元ダウン・サンプリングは，各次元独立に 1 次元のダウン・サンプリングを施すことで実現できる．図 9.13（a）に，垂直方向，水平方向の間引き率がそれぞれ 3 と 2 の格子変換の様子を示す．D0，D1 の値を変えることで，縮小率を変えることができる．また，3 次元，4 次元への拡張も容易である．
ここで，図 9.13（b）のように多次元処理として再表現しよう．間引き率を行列 D として与えること
で，多次元のダウン・サンプリングは，

y[ m ] = x[ Dm ] …………………………………………………………………………………………（9.33）のようにも表現できる．行列 D を間引き行列と呼ぶ．
多次元ダウン・サンプリングは，図 9.13 に示されるような可分離処理で十分な場合が多い．しかし，プログレッシブ映像とインターレース映像の間の変換や，ハニカム・センサから得られた六角
234

第9章

多次元線形システム設計

n1

m1

m1

n0

n0

m0

D1

D0
（a）1次元処理の縦続表示

x

n0
n1

D＝

3 0
0 2

y

m0
3m 0
＝x
m1
2m 1

n1

m1
D

n0

m0
（b）多次元処理表示

図 9.132 次元の可分離ダウン・サンプラ（ただし，D0 ＝ 3，D1 ＝ 2）

格子画像を方形格子に変換する場合など，非分離ダウン・サンプリングが必要となる重要な応用も少なくない．
例題 9.7

可分離ダウン・サンプリング

3 次元信号 x [n ]に対して，各次元の間引き率を D0 = 2，D1 = 3，D2 = 4 として 3 次元ダウン・サ
ンプリングを施したい．間引き行列 D を求めよ．
解間引き行列 D，各次元の間引き率を対角要素としてもつ対角行列となる．よって，

2 0 0
D = 0 3 0  0 0 4 と与えられる．
（2）非分離処理式（9.33）において，間引き行列 D を対角行列以外に選ぶと，処理後の標本化格子はどのようになるのであろうか？ 図 9.14 にその一例を示そう．
このダウン・サンプリングは，各次元 n 0，n 1 ごとに独立に施すことはできない．すなわち非分離のダウン・サンプリングとなる．x [ n ]がアナログ信号 x ( p )を標本化行列 V で標本化したものとすると，

y[ m ] = x[ Dm ] = x ( VDm ) ……………………………………………………………………………（9.34）
より，y [m ]は x (p )を標本化行列 V´ = VD で標本化したものとみなせる．V が対角行列で，標本化格子
9.3

多次元標本化格子変換

235

x

n0
n1

D＝

1 1

y

−1 1

m0
m 0＋m 1＝x
−m 0 ＋ m 1
m1

n1
D

m0

m1

n0

図 9.142 次元の非分離ダウン・サンプラ

が方形であったとしても，非分離ダウン・サンプリング後は，非方形の標本化格子となる．
より一般的には，間引き行列 D として任意の非特異整数行列を選択することができる．また，間引き率 D は

D = | det D | ……………………………………………………………………………………………（9.35）と与えられる．ここで，| det D | は D の行列式の絶対値を意味する．
例題 9.8

非分離ダウン・サンプリング

図 9.15 の左の格子から右の格子を得るための間引き行列 D を求めよ．なお，処理前と処理後の標本化行列 V，V´ はそれぞれ，

⎛ P0
V=⎜ 0
⎜
⎜0
⎝

0
P1
0

0⎞
⎛ 2P0
0 ⎟ , Vʹ = ⎜ 0
⎜
T ⎟⎟
⎜ 0
⎠
⎝
2

0
P1
0

P0 ⎞
0⎟
T ⎟⎟
2⎠

と与えられる．
解V´ = DV より，

T/2
P1

P0

t

T/2
P1

P0
p1

p0

図 9.15

236

第9章

p1

p0

3 次元の非分離格子変換

多次元線形システム設計

t

⎛ 1
⎜ P0
⎜
−1
D = V Vʹ = ⎜ 0
⎜
⎜ 0
⎝

0⎞
⎟ ⎛ 2P0⎟0⎟⎜ 0⎜
2 ⎟⎟ ⎜⎝ 0
T⎠

0
1
P1
0

P0 ⎞ ⎡ 2 0 1 ⎤0 ⎟ = ⎢0 1 0 ⎥⎢⎥T ⎟⎟ ⎢ 0 0 1 ⎥
⎣
⎦
2⎠

0
P1
0

なお，間引き率は D = | det D | = 2 となる．このダウン・サンプリングはプログレッシブ映像からインターレース映像を得る変換に対応する．
● ダウン・サンプラと周波数スペクトラム
1 次元の場合と同じように，多次元のダウン・サンプリングにおいても周波数スペクトラムの折り返し（エリアジング）によるひずみが問題となる．例題 6.2 で示した平均処理は，このエリアジングを回避する効果をもつ．多次元のダウン・サンプリングと周波数スペクトラムの関係を調べるために，
まず，Z 変換領域におけるダウン・サンプラの入出力関係について解説しよう．
例題 9.9

ダウン・サンプラの入出力関係

図 9.14 のダウン・サンプラの入出力関係を Z 変換領域で表現してみよう．
解
入力配列 x [ n]のうち，n 0 + n 1 が奇数となる，棄却される位置のサンプルをゼロ値に置換しよう．
この配列 u [n ]は，

1{x[ n ] + ( − 1) ( n + n ) x[ n ]}2u[ n ] =01のように x [ n ]とそれを変調した配列 e jπ (n0+n1) x [ n ] = (−1) (n0+n1) x [ n ]との平均操作で与えられる．u [ n ]の Z 変換 U (z)は，

U (z) =1
{X ( z ) + X ( − z ) }2のように表現される．結局，u( n )が n = Dm 以外の位置でゼロ値をとるため，X( z)と Y (z)の関係を

Y (z) = ∑ y[ m ]z−m = ∑ u[ Dm ]z−m = ∑ u[ n]z−D n
−1

m∈Z 2

m∈Z 2

n∈Z 2

1
= U ( zD ) = {X ( zD ) + X ( − zD ) }
2
−1

−1

−1

のように導くことができる．
より一般的な間引き行列 D に対しては，2 π D−T k 変調成分間の平均

U (z) =1
X ( e− j2πk D z) …………………………………………………………………（9.36）| det D | k∈N∑(D )
T

−1

T

によって棄却されるサンプルをゼロ値に置き換えることができる．この関係より
9.3

多次元標本化格子変換

237

0.15

0.6

0.1

振幅

振幅

1
0.8

0.4
0.2
0
1

0.5

0

ω 0 [×π rad] −0.5

−0.5

−1 −1

0.5

0

0.05
0
1

1

0.5

0

ω 0 [×π rad] −0.5

ω 1 [×π rad]（a）ダウン・サンプリング前

ω0

−1 −1

−0.5

0

0.5

1

ω 1 [×π rad]（b）ダウン・サンプリング後ω0
X (e j ωT )2π

Y (e j ωT )

2π
D

ω1

0

ω1

0

2π
2π
（c）スペクトラムの変化

図 9.16

可分離ダウン・サンプリングの周波数スペクトル例

Y (z) =1
X ( e− j2πk D zD ) ………………………………………………………………（9.37）| det D | k∈∑
N (D )
T

−1

−1

T

という関係が導かれる．ここで，N ( DT )は，DT の各列ベクトルで生成される平行超平面体内の整数
ベクトル集合である（第 8.2 節を参照）．例題 9.9 においては，| det D | = 2

N ( DT ) = {[ 00 ], [ 10 ]}2π kT D−1 = π kT [ 11 1−1 ]となる．
（1）周波数スペクトラム式（9.37）に z = e j を代入すると離散空間フーリエ変換（DSFT）
領域での入出力関係TY ( e jω ) =T1X ( e j(ω −2 π k) D ) ……………………………………………………………（9.38）| det D | k∈∑
N (D )
T−1

T

が導かれる．k = 0 以外の変調成分は，ダウン・サンプリングによって生じるエリアジング成分である．
例題 9.10

可分離ダウン・サンプリング
T

図 9.16（a）の周波数振幅特性をもつ 2 次元ガウス信号 X ( e jω )に対して，垂直方向と水平方向の間
238

第9章

多次元線形システム設計

引き率がそれぞれ3と2のダウン・サンプリングを施し，その結果の周波数振幅特性を描いてみよう．
解
以下に，MATLAB 上でのコマンド例を示そう．
% 垂直の間引き率
verticalDecFactor = 3;
% 水平の間引き率
horizontalDecFactor = 2;
% 配列の標準偏差
sigma = 2;
% 配列のサイズ
sizeX = 31;% 2 次元ガウス関数による配列の生成
arrayX = gaussian2cq(sizeX,sigma.^2);% ダウン・サンプリング
arrayY = ...
downsample(...
downsample(arrayX,...
verticalDecFactor).',...
horizontalDecFactor).';gaussian2cq は，2 次元ガウス分布を生成する関数として本書で用意した．図 9.16（b）にダウン・サンプル後の周波数振幅特性を示す．いま，間引き行列が D = diag([3 2 ]T )と与えられるので，
ダウン・サンプル前後の信号間の周波数スペクトラムは，  ω − 2π    ω − 2π    ω − 4π    ω − 4π     ω 1    ω3  jω 
+ X  j  ω 3   + X  j  3 ω 3   + X  j  3ω 3   + X  j  3 ω 3   + X  j  3ω 3   



π
π
−π
−
−
6
 e  2  
 e  2  
 e  2  
 e  2  
 e  2    X  e  2  T

Y (e jω ) =
T

1

0

T

T

T

0

0

1

T

0

1

0

1

T

0

1

1

という関係をもつ．図 9.16（c）に示すように，元のスペクトラムが垂直方向に 3 倍，水平方向に 2倍に膨張し，振幅は 1/6 となる．本例題の信号は適切な帯域制限が施されていないので，ダウン・
サンプル後はエリアジング（折り返しひずみ）を受けてしまう．
実習 9.7

ダウン・サンプルと周波数スペクトラム

M-file ： practice09̲7.m
水平方向，垂直方向の間引き率，配列の標準偏差を変えてダウン・サンプリングを実行し，その周波数スペクトラムの変化を見てみよう．

9.3

多次元標本化格子変換

239

1
0.8

振幅

振幅

0.6
0.4
0.2
0
1

0.5

0

ω 0 [×π rad] −0.5

−1 −1

0

−0.5

0.5

1

0.6
0.5
0.4
0.3
0.2
0.1
0
1

0.5

0

ω 0 [×π rad] −0.5

ω 1 [×π rad]

−0.5

0.5

ω 1 [×π rad]（b）ダウン・サンプリング後（a）ダウン・サンプリング前

ω0
ω0

−1 −1

0

X (e j ωT )Y (e j ωT )

2π

2π
D

ω1

ω1
2π

2π
（c）スペクトラムの変化

図 9.17

非分離ダウン・サンプリングの周波数スペクトル例

例題 9.11

非分離ダウン・サンプリング

図 9.17（a）の周波数振幅特性をもつ 2 次元ガウス信号 X ( e jω )に対して，以下の間引き行列 D によTるダウン・サンプリングを施し，その結果の周波数振幅特性を描いてみよう．

 1 1
D= −1 1 解以下に，MATLAB 上でのコマンド例を示そう．
% 間引き行列（2x2)
downMtx = [ 1 1 ; -1 1 ];% 配列の共分散行列
covMtx = [2 0 ; 0 1];% 配列のサイズ
sizeX = 31;% 2 次元ガウス関数による配列の生成
arrayX = gaussian2cq(sizeX,covMtx);
240

第9章

多次元線形システム設計1

% 2 次元ダウン・サンプリング
arrayY = downsample2(arrayX,downMtx);
ただし，downsample2 を 2 次元非分離ダウン・サンプルを行う関数として以下のように定義する．

function outputArray = ...
downsample2(inputArray,downMtx)% 入力配列のサイズ
nRowsInputArray = size(inputArray,1);
nColsInputArray = size(inputArray,2);
nCompInputArray = size(inputArray,3);% ダウン・サンプリング後の配列範囲計算
vertexPoints(:,1) = [ 0 0 ].';
vertexPoints(:,2) = ...
downMtx \ [ 0 nColsInputArray-1 ].';
vertexPoints(:,3) = ...
downMtx \ [ nRowsInputArray-1 0 ].';
vertexPoints(:,4) = ...
downMtx \ [ nRowsInputArray-1 ...
nColsInputArray-1 ].';
minPoint = floor(min(vertexPoints,[],2));
maxPoint = ceil(max(vertexPoints,[],2));% ダウン・サンプリング
clear arrayY;
iRow = 1;
for m0 = minPoint(1):maxPoint(1)iCol = 1;
for m1 = minPoint(2):maxPoint(2)originalPoint = downMtx * [ m0 m1 ].';
n0 = originalPoint(1);n1 = originalPoint(2);if n0 >= 0 && ...
n0 < nRowsInputArray && ...
n1 >= 0 && ...
n1< nColsInputArray
9.3

多次元標本化格子変換

241outputArray(iRow, iCol, :) = ...
inputArray(n0+1, n1+1, :);else
outputArray(iRow, iCol, :) = ...
zeros(1,nCompInputArray,...
class(inputArray));end
iCol = iCol + 1;
end
iRow = iRow + 1;
end
図 9.17（b）にダウン・サンプル後の周波数振幅特性を示す．いま，ダウン・サンプル前後の信号間の周波数スペクトラムは，Y (e jω ) =TTT⎛ ⎡ ω +ω −π ⎤⎥ ⎞ ⎫⎪1 ⎧⎪ ⎛ ⎡⎢ ω +2ω ⎤⎥ ⎞j ⎢ −ω +ω ⎥ ⎟ + X ⎜ j ⎢⎢ −ω 2+ω
X⎟⎜⎜ ⎢⎣ 2 −π ⎥⎥⎦ ⎟ ⎬2 ⎨ ⎜ ⎢⎣ 2 ⎥⎦ ⎟⎪⎩ ⎝ e
⎠
⎝e
⎠ ⎪⎭
0

1

0

1

0

1

0

1

という関係をもつ．図 9.17（c）に示すように，元のスペクトラムが垂直・水平方向にそれぞれ√￣
2倍に膨張し，45 度回転した形となる．振幅は 1/2 となる．
実習 9.8

ダウン・サンプルと周波数スペクトラム

M-file ： practice09̲8.m
ほかの間引き行列 D についてもダウン・サンプリングを実行し，その周波数スペクトラムの変化を見てみよう．
● 多次元アップ・サンプラ
多次元ダウン・サンプラと同じように，可分離処理と非分離処理を分けて解説しよう．
（1）可分離処理
多次元アップ・サンプラは，各次元独立に 1 次元のアップ・サンプリングを施すことで実現できる．
例題 6.3 はその一例である．図 9.18（a）に，垂直方向，水平方向の補間率がそれぞれ 3 と 2 の場合の格子変換の様子と処理構成を示す．
U0 と U1 の値を変えることで拡大率を変えることができる．また，3 次元，4 次元への拡張も容易である．
ここで補間行列 U を用いると，図 9.18（a）は（b）のように表現できる．この行列 U によって多次元
アップ・サンプリングの入出力関係は，

242

第9章

多次元線形システム設計

n1

m1

m1

n0

n0

m0

U1

U0
（a）1次元処理の縦続表示

n0
n1

x

U＝

3 0

y

0 2

m0
m1

n1

m1
U

n0

m0
（b）多次元処理表示

図 9.182 次元の可分離アップ・サンプラ（ただし，U0 ＝ 3，U1 ＝ 2）

 x[ U−1 m ]y[ m ] = 0m ∈ LAT ( U )…………………………………………………………………
（9.39）
その他と表現される．ここで，LAT(U)は，U によって定義される格子を意味している（8.1 節を参照）．
（2）非分離処理
可分離アップ・サンプリングの場合，式（9.39）における補間行列 U は対角行列となる．では，対角行列以外の U を選択した場合，処理後の標本化格子はどのように変わるであろうか？ 図 9.19 にその一例を示そう．
このアップ・サンプリングは，各次元 n 0，n 1 ごとに独立に施すことはできない．すなわち，非分離のアップ・サンプリングとなる．x [ n ]がアナログ信号 x ( p )を標本化行列 V で標本化したものとす
ると，

 x ( VU−1 m )y[ m ] = 0m ∈ LAT ( U )………………………………………………………………
（9.40）
その他

より，y [ m ]は，x ( p )を標本化行列 V´ = VU−1 で標本化した後，y [ m ] = 0，m ∉ LAT ( U )と置き換えた

x

n0
n1

U＝

1

1

−1 1

y

m0
m1

n1

m1

U

n0

図 9.19m0

2 次元の非分離アップ・サンプラ

9.3

多次元標本化格子変換

243

ものと見なせる．
なお，一般的には補間行列 U には，任意の非特異整数行列を選択することができる．また，補間率
U は，

U = | det U | ……………………………………………………………………………………………（9.41）と与えられる．
例題 9.12

非分離アップ・サンプリング

図 9.15 の右の格子から左の格子を得るための補間行列 U を求めよ．なお，処理前と処理後の標本化行列 V，V´ はそれぞれ，

⎛ 2P0
⎜
V=⎜ 0
⎜ 0
⎝

P0 ⎞
⎛ P0
⎟
⎜
0 ⎟ , Vʹ = ⎜ 0
T⎟
⎜0
⎝
2⎠

0
P1
0

0

0⎞
⎟
0⎟
T⎟
2⎠

P1
0

と与えられる．
解V´ = VU−1 より，

⎛ 1
⎜ P0

⎜
U=V V= 0
ʹ

−1

⎜
⎜
⎜
⎝ 0

0⎞

0
1
P1
0

⎟ ⎛ 2P0
⎟
0 ⎜ 0

⎟ ⎜
2 ⎟⎟ ⎜⎝ 0
T⎠

0
P1
0

P0 ⎞ ⎡ 2 0 1 ⎤0 ⎟ = ⎢0 1 0 ⎥⎢⎥T ⎟⎟ ⎢ 0 0 1 ⎥⎣⎦2⎠

なお，補間率は U = | det U | = 2 となる．このアップ・サンプリングは，インターレース映像からプログレッシブ映像を得る変換に対応する．
● アップ・サンプラと周波数スペクトラム
1 次元の場合と同じように，多次元のアップ・サンプリングも周波数領域においてイメージングを生じる．例題 6.3 で示したゼロ次ホールド処理は，このイメージングを抑える効果をもつ．
アップ・サンプラの周波数領域での応答について解説する前に，Z 変換領域でのアップ・サンプラの入出力関係を示そう．まず，Z 変換の定義と式（9.39）より，

Y ( z ) = ∑ y[ m ]z−m =
m∈Z D

∑

m∈LAT(U)x[ U−1 m ]z−m = ∑ x [n]z−Un ………………………………………（9.42）n∈Z Dとなる．よって，補間行列 U をもつアップ・サンプラの入出力関係はY ( z ) = X ( zU ) …………………………………………………………………………………………（9.43）のように表現される．
（1）周波数スペクトラム式（9.43）に z = e jω を代入すると離散空間フーリエ変換（DSFT）領域での入出力関係が導かれる．次
T

244

第9章

多次元線形システム設計

1
0.8

0.6

0.6
振幅

振幅

1
0.8

0.4

0.4

0.2

0.2

0
1

0
1

0.5

0

ω 0 [×π rad] −0.5

−1 −1

0

−0.5

0.5

1

0.5

ω 0 [×π rad] −0.5

ω 1 [×π rad]

−1 −1

−0.5

0

0.5

1

ω 1 [×π rad]（b）アップ・サンプリング後（a）アップ・サンプリング前

ω0

0

ω0

X (e j ωT )Y (e j ωT )

2π

2π
U

ω1

ω1
2π

2π
（c）スペクトラムの変化

図 9.20可分離アップ・サンプリングの周波数スペクトラム例

式がその結果である．

Y ( e jω ) = X ( e jω U ) ……………………………………………………………………………………（9.44）
T

例題 9.13

T

可分離アップ・サンプリング

図 9.20（a）の周波数振幅特性をもつ 2 次元ガウス信号 X ( e jω )に対して，垂直方向と水平方向の補T間率がそれぞれ 3 と 2 のアップ・サンプリングを施し，その結果の周波数振幅特性を描いてみよう．
解
以下に，MATLAB 上でのコマンド例を示そう．
% 垂直の補間率
verticalInpFactor = 3;
% 水平の補間率
horizontalInpFactor = 2;
% 配列の標準偏差
sigma = 2;
% 配列のサイズ
sizeX = 31;9.3

多次元標本化格子変換245

% 2 次元ガウス関数による配列の生成
arrayX = gaussian2cq(sizeX,sigma.^2);% アップ・サンプリング
arrayY = ...
upsample(...
upsample(arrayX,...
verticalInpFactor).',...
horizontalInpFactor).';
図 9.20（b）にアップ・サンプル後の周波数振幅特性を示す．いま，補間行列が U = diag ( [ 3 2 ]T )と与えられるので，アップ・サンプル前後の信号間の周波数スペクトラムは，(Y ( e jω ) = X e j[ ω ]T

3 ω0 T
2 1)という関係をもつ．図 9.21（c）に示すように，元のスペクトラムを水平方向，垂直方向それぞれ

1

1

0.8

0.8

0.6

0.6

振幅

振幅

1/2，1/3 に縮小したイメージングが現れる．

0.4

0.4

0.2

0.2

0
1

0
1

0.5

0

ω 0 [×π rad] −0.5

−1 −1

0

−0.5

0.5

1

0.5

0

ω 0 [×π rad] −0.5

ω 1 [×π rad]ω0

X (e j ωT )Y (e j ωT )

2π

2π

U

ω1

ω1
2π

2π
（c）スペクトラムの変化

図 9.21246

非分離アップ・サンプリングの周波数スペクトラム例

第9章

多次元線形システム設計

−0.5

0.5

ω 1 [×π rad]（b）アップ・サンプリング後（a）アップ・サンプリング前

ω0

−1 −1

0

1

実習 9.9

アップ・サンプルと周波数スペクトラム

M-file ： practice09̲9.m
水平方向，垂直方向の補間率，配列の標準偏差を変えてアップ・サンプリングを実行し，その周波数スペクトラムの変化を見てみよう．
例題 9.14

非分離アップ・サンプリング

図 9.21（a）の周波数振幅特性をもつ 2 次元ガウス信号 X ( e jω )に対して，以下の補間行列 U による
T

アップ・サンプリングを施し，その結果の周波数振幅特性を描いてみよう．

 1 1
U= −1 1 解以下に，MATLAB 上でのコマンド例を示そう．
% 補間行列（2x2)
upMtx = [ 1 1 ; -1 1 ];% 配列の共分散行列
covMtx = [2 0 ; 0 1];% 配列のサイズ
sizeX = 31;% 2 次元ガウス関数による配列の生成
arrayX = gaussian2cq(sizeX,covMtx);% 2 次元アップ・サンプリング
arrayY = upsample2(arrayX,upMtx);
ただし，downsample2を2次元非分離ダウン・サンプルを行う関数として以下のように定義する．

function outputArray = ...
upsample2(inputArray,upMtx)% 入力配列のサイズ
nRowsInputArray = size(inputArray,1);
nColsInputArray = size(inputArray,2);
nCompInputArray = size(inputArray,3);% アップ・サンプリング後の配列範囲計算
vertexPoints(:,1) = [ 0 0 ].';
9.3

多次元標本化格子変換247vertexPoints(:,2) = ...
upMtx * [ 0 nColsInputArray ].';
vertexPoints(:,3) = ...
upMtx * [ nRowsInputArray 0 ].';
vertexPoints(:,4) = ...
upMtx * [ nRowsInputArray nColsInputArray ].';
minPoint = floor(min(vertexPoints,[],2));
maxPoint = ceil(max(vertexPoints,[],2))-1;% アップ・サンプリング
clear arrayY;
iRow = 1;
for m0 = minPoint(1):maxPoint(1)iCol = 1;
for m1 = minPoint(2):maxPoint(2)outputArray(iRow, iCol, :) = ...
zeros(1,nCompInputArray,...
class(inputArray));originalPoint = upMtx \ [ m0 m1 ].';
if [m0 m1].' == upMtx * fix(originalPoint)n0 = originalPoint(1);n1 = originalPoint(2);if n0 >= 0 && ...
n0 < nRowsInputArray && ...
n1 >= 0 && ...
n1< nColsInputArray
outputArray(iRow, iCol, :) = ...
inputArray(n0+1, n1+1, :);end
end
iCol = iCol + 1;
end
iRow = iRow + 1;
end
図 9.21（b）にアップ・サンプル後の周波数振幅特性を示す．いま，アップ・サンプル前後の信号間の周波数スペクトラムは，
248

第9章

多次元線形システム設計

(ω0 − ω1 T
0+ 1

Y ( e jω ) = X e j[ ω ω ]T)という関係をもつ．図 9.21（c）に示すように，元のスペクトラムが垂直方向，水平方向にそれぞれ
1/√￣2 に縮小し，45 度回転した形となる．
実習 9.10

アップ・サンプルと周波数スペクトラム

M-file ： practice09̲10.m
ほかの補間行列 U についてもアップ・サンプリングを実行し，その周波数スペクトラムの変化を見てみよう．

9.4

標本化格子変換フィルタ設計

本節では，多次元ダウン・サンプラや多次元アップ・サンプラと組み合わせて利用されるエリア
ジング回避フィルタ，イメージング除去フィルタの理想特性について概説しよう．
● 可分離デシメータ（1）基本構成
多次元ダウン・サンプラは周波数領域でエリアジングを生じさせてしまう．そこで，1 次元の場合と同じように，ダウン・サンプラの前にエリアジング回避のためのフィルタを置くことが望ましい．
図 9.22 にその構成を示す．第 6 章で紹介した 1 次元デシメータを多次元に拡張したものである．
（2）理想フィルタ
ダウン・サンプリングによって生じるエリアジングは，2 π D −T k 変調成分の折り返しにより生じる．
まず，話をわかりやすくするため，可分離の場合について考えよう．
いま，d 番目の次元の間引き率を Dd とすると，ダウン・サンプラへの入力信号 x[n]が各次元において ± π / Dd で帯域制限されていれば，スペクトラムの重なりが生じない．従って，デシメーション・
フィルタ h [n ]の理想周波数応答 H I ( e jω )はT

H I (e

jω T

⎧1
⎪
)=⎨
⎪0
⎩

π
Dd
π
≤ | ωd | < πDd| ωd | <d = 0, 1, …, M − 1…………………………………………
（9.45）のように与えられる（図 9.23）．ただし，M は次元数，ωd は ω の d 番目要素である．
なお，上記フィルタはエリアジングを回避するという点においては理想的であるといえる．が，多次元信号の場合，後述する非分離標本化格子変換のところで触れるように，原信号のスペクトラ
ム形状によっては必ずしも適切ではないことに注意されたい．現実の問題では，可分離ダウン・サ

x [n ]
V

図 9.22h [n ]

u [n ]

Dy [ m]V′＝ VD

多次元デシメータの基本構成

9.4

標本格子変換フィルタ設計249

H (e j ωT ) ω 0

x [n ]

U

V

2π

π

D＝

3

π

2

2π

3 0
0 2

u [m ]

f [m ]y [m]V′＝ VU−1

図 9.24 多次元インターポレータの基本構成のとき

F (e j ωT ) ω 0

ω12π

図 9.23 2 次元デシメーション・フィルタの理
想周波数応答の例

π

U＝

3

利得6

π

2

2π

3 0
0 2

のとき

ω1

図 9.25 2 次元インターポレーション・フィ
ルタの理想周波数応答の例

ンプラと非分離フィルタ，場合によっては適応的に変化するフィルタが要求される．
● 可分離インターポレータ（1）基本構成
多次元アップ・サンプラはイメージングを生じる．そこで，1 次元の場合と同じように，アップ・
サンプラの後にイメージング抑圧のためのフィルタを置く．図 9.24 にその構成を示す．これは第 6 章
で紹介した 1 次元インターポレータを多次元に拡張したものである．
（2）理想フィルタ
アップ・サンプリングによって生じるイメージングは，2 π U−T 周期で現れる．可分離の場合，d 番

目の次元の補間率を Ud とすると，アップ・サンプラからの出力信号 u [ m ]を各次元において ± π / Ud で帯域制限すればイメージングを抑圧できる．従って，インターポレーション・フィルタ f [ m ]の理想周波数応答 F I (e jω )は，
T⎧ | det U |⎪FI ( e jω ) = ⎨
⎪0
⎩
T

π
Ud
π
≤ | ωd | < πUd| ωd | <d = 0, 1, L , M − 1 ………………………………………（9.46）のように与えられる（図 9.25）．
ただし，この場合も原信号のスペクトラム形状によっては必ずしも適切ではないことに注意されたい．
● 有理数比標本化格子変換
1 次元の場合と同じように，間引き行列 D のデシメータと補間行列 U のインターポレータを縦続接続すると，有理数比の標本化格子変換を実現できる．V，V´ を，それぞれ変換前と変換後の標本化格子行列とすると，V´ = VU−1D という関係が与えられる．
図 9.26 に有理数比標本化格子変換の基本構成を示そう．図中のフィルタ g[l]の理想周波数応答
GI(e jω )は，
T

250

第9章

多次元線形システム設計

x [n ]

UV

図 9.26v [k ]

g [k ]

D

VU−1

y [m]
V′
＝ VU−1D

有理数比標本化格子変換の基本構成

π π ⎞⎧| det U | | ω d | < min ⎛,⎪⎝Dd Ud ⎠G I ( e jω ) = ⎨
π π ⎞
min ⎛
,
≤ | ωd | < π⎪0⎝ Dd Ud ⎠⎩のように与えられる．
T

例題 9.15

u [k ]

d = 0, 1, L , M − 1…………………………（9.47）

有理数比画像解像度変換

入力画像を垂直 2/3，水平 2/3 の解像度に変換する格子変換器を，フィルタ・サイズを 11 × 11として設計しよう．また，この変換器で図 6.1 に示す画像の解像度を変換してみよう．
解
題意より，補間行列，間引き行列をそれぞれ

⎡2 0⎤
⎡3 0⎤
U=⎢
⎥, D = ⎢0 3 ⎥
0
2
⎣
⎦
⎣
⎦
のように設定すればよい．ここでは，フィルタを分離型で設計しよう．まず，1 次元 11 タップの直線位相フィルタを固有フィルタ設計法で設計し，これを用いて 2 次元フィルタを構成する．以下に，MATLAB 上でのコマンド例を示そう．なお，pictureOriginal を原画像のワークスペース
上での参照とする．
% 垂直補間率up0 = 2;% 垂直間引き率
down0 = 3;
% 水平補間率up1 = 2;% 水平間引き率
down1 = 3;
% 垂直用フィルタ設計
factor0 = max(up0,down0);
order0 = 2 * (up0 * down0 - 1);
edgePassBand0 = 1/factor0 * 0.5;
edgeStopBand0 = 1/factor0 * 1.5;
weight0 = 0.5; % pass:stop = 1:1
g0 = eigLpFir(order0,...
9.4

標本格子変換フィルタ設計

251

4

振幅

3
2
1
0
1

（b）処理画像0.50ω 0 [×π rad] −0.5

−1 −1

−0.5

0

0.5

1

ω 1 [×π rad]（a）フィルタ

図 9.27

画像の解像度変換例

edgePassBand0,edgeStopBand0,weight0);% 水平用フィルタ設計
factor1 = max(up1,down1);
order1 = 2 * (up1 * down1 - 1);
edgePassBand1 = 1/factor1 * 0.5;
edgeStopBand1 = 1/factor1 * 1.5;
weight1 = 0.5; % pass:stop = 1:1
g1 = eigLpFir(order1,...
edgePassBand1,edgeStopBand1,weight1);% 2 次元フィルタ
G = up0 * up1 * kron(g1.',g0);% 2 次元アップ・サンプリング
upMtx = diag([up0 up1]);
pictureU = upsample2(pictureOriginal,upMtx);% 2 次元畳み込み
clear pictureG;
pictureG = filter2(G,double(pictureU),'same');% 2 次元ダウン・サンプリング
downMtx = diag([down0 down1]);
pictureOutput = ...
uint8(downsample2(pictureG,downMtx));
1 次元フィルタの設計仕様として，min(π /Dd, π /Ud ) = π /3 より，通過域端を ω p = π /3 × 0.5，阻止域端を ω s = π /3 × 1.5 と設定した．通過域と阻止域の近似の重みを 1 ： 1 として設計し，図 9.27
252

第9章

多次元線形システム設計

（a）に示す振幅応答をもつフィルタを得た．ここで利得 | det U | = 4 を与えたことに注意されたい．
このフィルタを使って標本化格子変換を施すと，図 9.27（b）に示す画像が与えられる．
図 9.26 の基本構成では，ダウン・サンプラで多くの画素を棄却するにもかかわらず，いったん画像を大きくしてしまう．演算量，記憶容量の両面で負担が大きくなる．この問題を回避するためには，第 6.4 節で紹介したポリフェーズ実現が望ましい．上記の例題は，アップ・サンプラ，ダウン・サンプラ，フィルタがすべて可分離なので，水平，垂直それぞれ独立に有理数比レート変換を施すことで実現できる．
ただし，動画像の場合，第 8.4 節でも触れたように，動きに応じてスペクトラムの形状が変化する．
従って，動き推定の情報など，時間方向も含めた対策が必要となることに注意されたい．
実習 9.11

有理数比画像解像度変換

M-file ： practice09̲11.m
変換比やフィルタの仕様を変えて，有理数比画像解像度変換器を設計してみよう．
● 非分離標本化格子変換
ここでは非分離標本化格子変換のためのフィルタ設計手法について解説しよう．ただし，多次元
標本化格子変換フィルタの理想特性は単純な問題ではない．以下では，典型的な理想特性の設定について説明する．
（1）フィルタの理想特性
格子変換の一般的な理想特性を与える前に，非特異実行列 V で与えられる対称平行超平面体領域（Symmetrical Parallelpiped）
SPD( V )について定義を示す．SPD(V )は，

SPD( V ) = {VX | x ∈[ − 1, 1) M} ………………………………………………………………………（9.48）と定義される．ここで，x ∈ [ a, b )M は，M 次元ベクトル x の i 番目要素 x i が a < x i < b の範囲にあることを意味する．
例題 9.16SPD

次の行列 V によって与えられる SPD( V )を求めよ．

 1 1
V= −1 1 解
まず，図 9.28 に示すような LAT ( V )を考える．すると，原点を囲む四つの領域が SPD(V )となる．
SPD ( π D−T )内に帯域制限された信号は，間引き行列 D の間引き処理を行ってもエリアジングを生じない．より一般的には，任意のユニモジュラ行列 E を用いて SPD ( π ( DE ) −T )と表現できる．したがって，間引き行列 D のデシメーション・フィルタの理想特性は，
9.4

標本格子変換フィルタ設計

253

ω0

V0＝

( )
1
−1

V1＝

()
1
1

ω1

SPD(V)

図 9.28

1
H I ( e jω ) = 0T

SPD(V)の例

ω ∈ SPD(π D′−T )……………………………………………………
（9.49）
ω ∈[ − π , π )M − SPD(π D′−T )のように設定できる．ただし，D´ = DE とする．元のスペクトラムの連続性や形状を保持するためには，理想特性の設定に注意を払わなければならない．
図 9.29（a），（b）に次の間引き行列

 1 1
D= …………………………………………………………………………………………（9.50）
 −1 1 
0に対する理想フィルタの通過域を示す．図 9.29
（a）
では E = ( 10 01 )，図 9.29
（b）
では E = ( 11 −1)と選択した．

参考までに入力信号のスペクトラム X ( e jω )のサポート領域の例を示す．図 9.29（a）のフィルタでは，
T

信号スペクトラムが一部阻止域に重なるが，図 9.29（b）のフィルタではすべて通過することが分かる．
すなわち，理想特性の設定が入力信号に大きく依存することが分かる．なお，図 9.29（b）の特性は，周波数応答の周期性から，通過域が | ω 0 | < π/2 の垂直方向の 1 次元低域通過フィルタとしてよい．
補間行列 U のインターポレーション・フィルタの理想特性は，

 | det U |FI ( e jω ) = 0Tω ∈ SPD(π U′−T )………………………………………………
（9.51）
ω ∈[ − π , π )M − SPD(π U′−T )のように設定できる．ただし，U´ = UE とする．ここでも，イメージング成分を適切に除去できるかω0ω0

X (e j ωT )π

X (e j ωT )

π

ω1

−π

SPD(π D −T )
−π

π
（a）特性
（1）

図 9.29254

第9章

デシメーション・フィルタの理想特性

多次元線形システム設計

ω1

−π

−T )
SPD(π D′

−π

π
（b）特性
（2）

ω0

ω0

X (e j ωT U)π

X (e j ωT U)

π

ω1

−π

SPD(π U −T )
−π

π

ω1

−π

−T )
SPD(π U′−ππ（a）特性（1）

図 9.30（b）特性（2）インターポレーション・フィルタの理想特性

否かは，元のスペクトラムの形状に依存する．スペクトラムの連続性や形状を保持するためには，
理想特性の設定に注意を払わなければならない．
図 9.30（a），（b）に補間行列⎡ 1 1⎤
U=⎢⎥ …………………………………………………………………………………………（9.52）⎣ −1 1 ⎦に対する理想フィルタの通過域を示す．図 9.30
（a）
では E = ( 10 01 )，図 9.30
（b）
では E = ( 10 −10 )と選択した．
参考までにアップ・サンプリング後の信号スペクトラム X ( e jω U )のサポート領域の例も重ねて示す．
T

図 9.30（a）のフィルタでは，イメージングのスペクトラムが一部通過域に重なり，オリジナルのスペクトラムが一部阻止域に重なる．一方，図 9.30（b）のフィルタでは，イメージングを完全に除去でき，
オリジナルを完全に通過させることが分かる．ここでも，理想特性の設定が入力信号に依存することが分かる．
（2）間引き設計法
理想特性が適切に設定されたとして，以下では，一般的な非対角の間引き行列 D あるいは補間行列

U に対応できる間引き設計法を紹介しよう．

間引き設計法の特徴は以下のとおりである．
• 1 次元フィルタから設計できる．

（9.49）の特性を近似できる．
• 任意の次元 M，任意の非特異行列 D に対し，式• 一般の多次元非分離フィルタに比べて，設計と実装が効率的である．
• 多次元ナイキスト・フィルタを設計できる．

以下にその手続きを示す．
1．図 9.31 に示す理想特性を近似する 1 次元低域通過フィルタ P(e jω )を設計する．

2．次式のように多次元可分離フィルタ h (s) [ n ]を定義する．

h(s) [ n ] = p[ n 0 ] ⋅ p[ n1 ]L p[ n M −1 ]ただし，p [ nd ]は，P( e jω )の d 番目次元のインパルス応答

3．h (s) [ n ]を次式のように行列 D̂で間引き，スケーリングすることで，フィルタ H ( e jω )のインパ
T

ルス応答 h [ n]を得る．

9.4

標本格子変換フィルタ設計255

P (e jω )1ω−π / det D

π / det D

図 9.31 プロトタイプ 1 次元低域通過フィルタの理想特性ˆ ]h[ n ] = | det D | M −1 h(s) [Dn
ただし，D̂ = | det D | D−1 である．
例題 9.17間引き設計法式（9.50）の間引き行列 D に対応するデシメーション・フィルタを設計しよう．
解以下に，MATLAB 上でのコマンド例を示そう．
% 間引き行列（2x2)
downMtx = [ 1 1 ; -1 1 ];absDetD = abs(det(downMtx));% プロトタイプ 1次元フィルタ設計
nOrder = 20; % プロトタイプフィルタの次数
passBandEdge = 1/absDetD * 0.8;
stopBandEdge = 1/absDetD * 1.2;
freqWeight = 0.5;
prtFilter = eigLpFir(nOrder,...
passBandEdge,stopBandEdge,freqWeight);% 間引きフィルタ設計 1
filter4Dec1 = ...
downsampleFilterDesign2(prtFilter, downMtx);% 間引きフィルタ設計 2
unimodMtx = [ 1 0 ; 1 -1 ];filter4Dec2 = downsampleFilterDesign2(...
prtFilter, downMtx*unimodMtx);| det D | = 2 より，通過域 | ω | < π /2 を理想特性とする近似フィルタを 1 次元プロトタイプ・フィル
256

第9章

多次元線形システム設計

2.5

2

2

1.5

1.5

振幅

振幅

2.5

1

1

0.5

0.5

0
1

0
1

0.5

0

ω 0 [×π rad] −0.5

−1 −1

−0.5

0

0.5

1

ω 1 [×π rad]0.50

ω 0 [×π rad] −0.5

−0.5

0.5

ω 1 [×π rad]（2）（b）フィルタ（a）フィルタ（1）

図 9.32−1 −10間引き設計法による設計例

タ P ( e jω )として固有フィルタ設計法により設計した．次数を 20，通過域端を ω p = π /4，阻止域端
0を ω s = 3 π /4，通過域阻止域の周波数重みを 1 ： 1 とし，E = ( 10 01 )，E = ( 11 −1)の 2 種類のユニモジュ

ラ行列を用いて間引き設計している．
downsampleFilterDesign2 は，間引き設計法を行う関数として次のように定義した．
function h = downsampleFilterDesign2(...
prtFilter, slaMtx);% 間引き行列の行列式の絶対値
absDetMtx = abs(det(slaMtx));% 2 次元可分離フィルタの作成
spFilter = kron(prtFilter(:).',prtFilter(:));% ダウン・サンプリング
adjMtx = absDetMtx * inv(slaMtx);
h = absDetMtx * ...
downsample2(spFilter,adjMtx);
設計したフィルタの周波数振幅応答を，それぞれ図 9.32（a），（b）に示す．
実習 9.12間引き設計法M-file ： practice09̲12.m
さまざまな間引き行列 D に対応するデシメーション・フィルタを設計しよう．また，設計したフィルタを使ってデシメーションを行おう．

9.4

標本格子変換フィルタ設計

257

1

H (z )D

H ( zD)＝

F (z )

D

D1

＝

＝

F ( zU)U（b）アップ・サンプラとフィルタ（a）ダウン・サンプラとフィルタ
D0

U

D

U1

U0

＝

U

D＝D0D1

U＝U1U0（c）ダウン・サンプラの縦続接続

図 9.33（d）アップ・サンプラの縦続接続

格子変換器の等価関係（3）ナイキスト（M）
フィルタ設計
M = | det M | としてプロトタイプの 1 次元低域通過フィルタをナイキスト（M）
フィルタ（6.5 節を参照）
で与えると，間引き手法は多次元のナイキスト（M）フィルタを与える．
実習 9.13

多次元ナイキスト・フィルタ設計

M-file ： practice09̲13.m
式（9.52）の補間行列 U に対応するインターポレーション・フィルタをナイキスト（U）フィルタとして設計しよう．
● 多次元マルチレート・システムの諸性質
非分離システムにおいても，デシメータとインターポレータを縦続接続することで UD−1 倍の標本化格子変換が可能となる．また，図 9.33 に示す諸性質を利用することで，ポリフェーズ実現も同様に可能である．
● 適応処理の必要性
分離型，非分離型共に多次元信号のフィルタリング問題は単純ではない．信号のスペクトラム形状にフィルタの理想特性が依存することが主な理由である．従って，実際には信号に依存した適応的な処理が必要とされる．
例えば，単板式のカラー画像センサでは図 9.34 に示すようなカラー・フィルタを通して撮像を行う．各色成分の欠けた部分については補間を行うことになるが，空間的にこう配の小さな方向（エッ

色フィルタ

原
色
ベ
イ
ヤ
形

図 9.34
ベイヤ形カラー・フィルタ

258

第9章

多次元線形システム設計

感光部ジ）を検出し，その方向に対して平滑化による補間を施す方法がある．それは局所的なスペクトラム
形状に合わせてフィルタの周波数応答を適応的に変えることにほかならない．
プログレッシブ映像からインターレース映像への変換や，インターレース映像からプログレッシ
ブへの変換もまた，多次元標本化格子変換そのものである．空間解像度変換もしばしば要求される．
映像のスペクトラムが動きによって変化することから，使用するフィルタの特性も合わせて変化することが望ましい．このため，動き適応/補償フィルタの技術が必要となる．次章にて簡単なシミュ
レーション例を紹介しよう．

章末問題
問題 9.1

分離処理（MATLAB 演習）

任意の 2 次元配列に対して，例題 9.3 で設計したフィルタによる 2 次元畳み込みを実行してみよう．
また，この設計に用いた 1 次元フィルタによる 1 次元畳み込みを各次元独立に施し，2 次元畳み込みの結果と一致することを確かめ，演算量について考察してみよう．
問題 9.2

ファン・フィルタ（MATLAB 演習）

以下のパラメータを設定すると，マクレラン変換によって 2 次元ファン・フィルタを設計できる．

A = B = C = 0, D =

1
1
, E=−
2
2

例題 9.6 を参考に設計してみよう．
問題 9.3

高域通過型（Ⅰ）
フィルタ（MATLAB 演習）

例題 9.5 で設計した低域通過フィルタから，式（9.26）の変換を利用して線形位相をもつ（インパルス応答が対称な）高域通過型（Ⅰ）の FIR フィルタを設計してみよう．ただし，式（9.26）がゼロ位相フィルタに対する変換であることから，インパルス応答の中心の位置に注意しよう．
問題 9.4

高域通過型（Ⅱ）
フィルタ（MATLAB 演習）

例題 9.5 で設計した低域通過フィルタから，式（9.28）の変換を利用して線形位相をもつ高域通過型（Ⅱ）FIR フィルタを設計してみよう．
問題 9.5帯域通過型 FIR フィルタ
（MATLAB 演習）

例題 9.5 で設計した低域通過フィルタから，式（9.30）の変換を利用して線形位相をもつ帯域通過型
FIR フィルタを設計してみよう．
問題 9.6

非分離ダウン・サンプリング

対角の標本化行列
章末問題

259

 P0
V= 0

0


0
P1
0

0
0
T 
2

によって標本化したプログレッシブ映像に対して，間引き行列

 2 0 1D =  0 2 1 0 0 1 によるダウン・サンプリングを施した後の標本化行列 V´ を求めよう．また，処理後の標本化格子も描いてみよう．
（FCO ： Face-Centered Orthorhombic 格子となる）
問題 9.7

可分離アップ・サンプリング

任意の 3 次元信号に対して，各次元の補間率を U0 = 2，U1 = 3，U2 = 4 として 3 次元アップ・サンプ
リングを施したい．補間行列 U を求めよ．
問題 9.8非分離有理数比標本化格子変換

1080i フォーマットの映像（画素数 1080 × 1920，フレーム・レート 29.97fps，インターレース方式）
を 720p フォーマットの映像（画素数 720 × 1280，フレーム・レート 59.94fps，プログレッシブ方式）に変換するための補間行列 U と間引き行列 D を求めてみよう．
問題 9.9ポリフェーズ実現

垂直時間（VT ： Vertical-temporal）
フィルタ

1
1
F( z ) = 1 + (z0 + z0−1 ) + zT−1
42をイメージング除去フィルタ（図 9.24 を参照）として利用したインターレース-プログレッシブ（IP）変のポリフェーズ実現構成を考えてみよう．
換（例題 9.12 を参照）
参考文献
（1）川又政征，樋口龍雄；多次元ディジタル信号処理，朝倉出版，1995 年．
（2）D. E. Dudgeon and R. M. Mersereau ； Multidimensional Digital Signal Processing，Prentice Hall，1983．
（3）John, W. Woods ； Multidimensional Signal, Image and Video Processing and Coding，Academic Press，2006．
（4）P.P. Vaidyanathan ； Multirate Systems and Filter Banks，Prentice Hall，1993．
（5）Bahadir K. Gunturk, John Glotzbach, Yucel Altunbasak, Ronald W. Schafer, and Russel M. Mersereau ；Demosaicking: Color FIlter Array Interpolation，IEEE Signal Proc. Magazine，Vol.44，Jan. 2005．

260

第9章

多次元線形システム設計

第 10 章動き適応/補償フィルタリング

カメラでは，通常，明確な帯域制限が施されることなく，光学系を通してセンサ上に結ばれた像が画像・映像信号として取り込まれる．従って，画像・映像信号はエリアジングを含む可能性がある．また，スペクトラム形状に応じた処理が必要であることにも注意しなければならない．特に映像では，動きに応じてスペクトラムが傾くので，フィルタリングの際には動き情報の利用が欠かせない．本章では，動きの情報の有効性を示す応用技術としてインターレース-プログレッシブ（IP）変換について解説しよう．

10.1

固定係数 IP 変換

まず，例題 9.12 で紹介した IP 変換を簡単な固定係数フィルタを使って実装し，動き情報を使わない場合の問題点を確認しよう．
なお，以降のシミュレーションでは，次に示す mkInterlacedMov 関数で生成したインターレース
映像を利用する．この関数は，図 10.1 に示すようにランダムなパターンを背景とし，二つのオブ

図 10.1
シミュレーション用画像

10.1

固定係数 IP 変換

261

ジェクトが一定の速度で移動する映像を与える．

function frameSeq = mkInterlacedMov(velocity)% 静止画像の読み込み
pictureObj = ...
imread('./data/squareandgauss.tif');pictureBg = ...
imread('./data/background.tif');% インターレース映像の生成
nFrames = 16; % フレーム数
pictureI = ...
zeros(size(pictureObj),'uint8');for iFrame = 1:nFrames
pictureObj = ...
circshift(pictureObj, velocity);
picture = pictureObj + ...
uint8(not(pictureObj)) .* pictureBg;
pictureI(2:2:end,:) = picture(2:2:end,:);pictureObj = ...
circshift(pictureObj, velocity);
picture = pictureObj + ...
uint8(not(pictureObj)) .* pictureBg;
pictureI(1:2:end,:) = picture(1:2:end,:);frameSeq(iFrame) = ...
im2frame(pictureI,gray(256));end
IP 変換の概要を図 10.2 に示す．水平方向の補間は必要ないため，時間-垂直平面のみを表示している．白丸がインターレース映像の標本点であり，黒丸は IP 変換によって補間される標本点を表している．
固定係数フィルタを使った補間は，映像の性質とは独立に各黒丸の画素値を周辺の白丸の画素値から与える．9.4 節でも示したとおり，このフィルタの理想特性は処理される映像の性質に依存する．
● 時間方向補間
時間方向補間の様子を図 10.3 に示す．同図の手法はフィールド挿入，あるいは Weave とも呼ばれ，
この補間を与える時間方向補間フィルタは，

G (z) = 1 + zT−1 …………………………………………………………………………………………（10.1）
262

第 10 章動き適応/補償フィルタリング

フレーム

フレーム
時間

時間

IP変換

垂直

垂直

トップ・
フィールド

補間画素

ボトム・
フィールド

図 10.2IP 変換（デインターレース）の概要

時間1

図 10.3
時間方向補間（点線矢印上の数値は重み係数）

垂直前フィールドからコピー（ゼロ次ホールド）

ω0

ω0

π

π

ωT
−π

ωT
−π

−π

π

イメージング成分（a）速い動きのある映像

図 10.4π−π
イメージング成分（b）動きのない映像

アップ・サンプリング後の映像の周波数特性と時間方向フィルタの周波数応答と表現される．速い動きのある映像では，傾いたスペクトラムの端部が除去され，空間解像度が失われてしまう．また，イメージング成分が除去されずに時間方向の高周波成分が空間の高周波成分「くし状効果」として残ってしまう（図 10.4（a））．垂直方向のみならず水平方向の動きでも同じ問題が生じる．一方，このフィルタは時間方向のみに帯域制限を施すため，動きがなく時間方向の高周波成分が少ない映像では，空間解像度を高く保つ特性をもつ（図 10.4（b））．
10.1

固定係数 IP 変換263

例題 10.1

時間方向補間一定の速度( v 0, v 1 )T = ( 2, 2 )T［画素/フィールド］でオブジェクトが並進移動するインターレース
映像に対して時間方向補間 IP 変換を施し，プログレッシブ映像を生成してみよう．また，動きのない ( v 0, v 1 )T = (0, 0 )T の場合と比較してみよう．
解以下に MATLAB 上でのコマンド例を示す．
% 速度ベクトル（垂直，水平）
velocity = [2 2];% インターレース映像モデルの生成
frameSeq = mkInterlacedMov(velocity);
nFramesIn = length(frameSeq);% avifile オブジェクトの生成
outputFileName = 'tmp/tempip.avi';frameSize = size(frame2im(frameSeq(1)));frameRate = 30;
nFrameOut = 2 * nFramesIn;
clear mex;%
aviObj = avifile(outputFileName,...
'FPS',frameRate,'COMPRESSION','None');% 時間方向補間 IP 変換
deintPicture0 = 128*ones(frameSize,'uint8');
deintPicture1 = 128*ones(frameSize,'uint8');
previousField = ...
128*ones(frameSize./[2 1],'uint8');for iFrame = 1:nFramesIn
pictureI = frame2im(frameSeq(iFrame));%--- Process for picture0
deintPicture0(1:2:end,:) = previousField;
deintPicture0(2:2:end,:) = pictureI(2:2:end,:);%--- Process for picture1
deintPicture1 = pictureI;
previousField = pictureI(1:2:end,:);%264

第 10 章動き適応/補償フィルタリング

（a）(v 0，v 1)T ＝(2，2)T（b）(v 0，v 1)T ＝(0，0)T

図 10.5 時間方向補間の結果

aviObj = addframe(aviObj, ...
im2frame(deintPicture0,gray(256)));
aviObj = addframe(aviObj, ...
im2frame(deintPicture1,gray(256)));end
aviObj = close(aviObj);
動きのない場合については，velocity ＝[0 0]と設定すればよい．図 10.5 に出力のオブジェク
ト部を拡大して示す．
図 10.5 より，時間方向補間は動きのある領域でくし状効果を生じ，動きのない映像に対して鮮明なフレーム画像を与えることが確認できる．
実習 10.1

時間方向補間M-file ： practice10̲1.m
オブジェクトの移動速度（velocity）を変えて試してみよう．例題 4.9 で紹介した CIF 映像
mobile.cif はインターレース映像である．この映像に対して時間方向補間を施してプログレッシ
ブ化してみよう．
● 垂直方向補間
垂直方向補間の様子を図 10.6 に示す．しばしば，この手法は Bob と呼ばれる．同図の補間を与える垂直方向補間フィルタは，

1
G(z) = 1 + (z 01 + z 0−1 ) ………………………………………………………………………………（10.2）2
10.1

固定係数 IP 変換

265

時間
1/2
1/2

図 10.6垂直方向補間（点線矢印上の数値は重み係数）

垂直自フィールドの上下隣接画素の平均（線形補間）

ω0

ω0

π

π

ωT
−π

ωT
−π

−π

π

イメージング成分（a）速い動きのある映像

図 10.7−ππ

イメージング成分（b）動きのない映像

アップ・サンプリング後の映像の周波数特性と垂直方向フィルタの周波数応答と表現され，垂直方向のみに帯域制限を施す．処理がフィールド内で閉じているため，動きのある映像に対しても時間方向フィルタのようなくし状効果は現れない（図 10.7（a））．しかし，動きのない映像では，イメージングが除去されずに空間の高周波成分が時間方向の高周波成分「ちらつき」として残ってしまう（図 10.7（b））．
例題 10.2

垂直方向補間一定の速度 (v 0, v 1 )T = ( 2, 2)T［画素/フィールド］でオブジェクトが並進移動するインターレース
映像に対して垂直方向補間 IP 変換を施し，プログレッシブ映像を生成してみよう．また，動きのない (v 0, v 1 )T = (0, 0 )T の場合と比較してみよう．
解以下に MATLAB 上でのコマンド例を示そう．ただし，for ループの外側の処理は例題 10.1 の解とほぼ同じであるため，ここでは割愛する．

for iFrame = 1:nFramesIn
pictureI = frame2im(frameSeq(iFrame));%--- Process for picture0
deintPicture0(1:2:end,:) = ...
1/2 * pictureI(2:2:end,:) ...
+ 1/2 * [ pictureI(2,:) ; ...
266

第 10 章動き適応/補償フィルタリング

（a）(v 0，v 1)T ＝(2，2)T

図 10.8（b）(v 0，v 1)T ＝(0，0)T

垂直方向補間の結果

pictureI(2:2:end-2,:)];
deintPicture0(2:2:end,:) = pictureI(2:2:end,:);%--- Process for picture1
deintPicture1(1:2:end,:) = pictureI(1:2:end,:);deintPicture1(2:2:end,:) = ...
1/2 * pictureI(1:2:end,:) ...
+ 1/2 * [ pictureI(3:2:end,:) ; ...
pictureI(end-1,:)] ;%aviObj = addframe(aviObj, ...
im2frame(deintPicture0,gray(256)));
aviObj = addframe(aviObj, ...
im2frame(deintPicture1,gray(256)));end
なお，上記のコマンド例は画面境界部にて対称拡張法を適用している．図 10.8 に処理後のオブ
ジェクト部を拡大して示す．
図 10.8 より，垂直方向補間は動きの有無によらず同等のフレーム画像を与えることが分かる．画
面のちらつきについては処理後の映像で確認されたい．
実習 10.2

垂直方向補間M-file ： practice10̲2.m
10.1

固定係数 IP 変換

267

オブジェクトの移動速度（velocity）を変えて試してみよう．また，例題 4.9 で紹介したインターレース映像 mobile.cif に対して垂直方向補間を施し，プログレッシブ化してみよう．
● 時間垂直補間
時間垂直補間の様子を図 10.9 に示す．同図の補間を与える時間垂直補間フィルタは，

1
1
G (z) = 1 + zT−1 + (z01 + z0−1 ) ………………………………………………………………………（10.3）24と表現され，ひし形の通過帯域をもつ．時間方向補間と垂直方向補間の中間的な結果が得られ，動きのある領域についてはくし状部の抑圧効果をもち（図 10.10（a）），動きのない領域については空間
高周波を保つ効果をもつ（図 10.10（b））．
例題 10.3

時間垂直補間一定の速度 ( v 0, v 1 )T = ( 2, 2 )T［画素/フィールド］でオブジェクトが並進移動するインターレース
映像に対して時間垂直補間 IP 変換を施し，プログレッシブ映像を生成してみよう．また，動きのない (v 0, v 1 )T = (0, 0 )T の場合と比較してみよう．
解以下に MATLAB 上でのコマンド例を示そう．ただし，for ループの外側の処理は例題 10.1 の解とほぼ同じであるため．ここでは割愛する．

時間
1/2

1/4
1/4

図 10.9
時間垂直間（点線矢印上の数値は重み係数）

垂直自フィールドの上下隣接画素と前フィールドの同じ位置の画素の
線形和

ω0

ω0

π

π

ωT
−π

−π

π

−π
イメージング成分（a）速い動きのある映像

図 10.10268

第 10 章ωT−ππ

イメージング成分（b）動きのない映像

アップ・サンプリング後の映像の周波数特性と時間垂直フィルタの周波数応答

動き適応/補償フィルタリング

for iFrame = 1:nFramesIn
pictureI = frame2im(frameSeq(iFrame));%--- Process for picture0
deintPicture0(1:2:end,:) = ...
1/4 * pictureI(2:2:end,:)...
+ 1/2 * previousField...
+ 1/4 * [ pictureI(2,:) ; ...
pictureI(2:2:end-2,:)];
deintPicture0(2:2:end,:) = pictureI(2:2:end,:);previousField = pictureI(2:2:end,:);%--- Process for picture1
deintPicture1(1:2:end,:) = pictureI(1:2:end,:);deintPicture1(2:2:end,:) = ...
1/4 * pictureI(1:2:end,:)...
+ 1/2 * previousField...
+ 1/4 * [ pictureI(3:2:end,:) ; ...
pictureI(end-1,:)];
previousField = pictureI(1:2:end,:);%aviObj = addframe(aviObj, ...
im2frame(deintPicture0,gray(256)));
aviObj = addframe(aviObj, ...
im2frame(deintPicture1,gray(256)));end
図 10.11 に処理後のオブジェクト部を拡大して示す．
時間垂直補間では，最良の結果は得られないものの，時間方向補間，垂直方向補間で生じる最悪の結果を回避することができる．
実習 10.3

時間垂直補間M-file ： practice10̲3.m
オブジェクトの移動速度（velocity）を変えて試してみよう．また，例題 4.9 で紹介したインターレース映像 mobile.cif に対して時間垂直補間を施し，プログレッシブ化してみよう．

10.1

固定係数 IP 変換

269

（a）(v 0，v 1)T ＝(2，2)T（b）(v 0，v 1)T ＝(0，0)T

図 10.11 時間垂直補間の結果

10.2

動き適応 IP 変換

固定係数 IP 変換では，その補間フィルタの周波数応答によって得手不得手があることを理解できたと思う．では次に，固定係数 IP 変換からの改善の第一歩として，動きの有無に応じて処理を切り替える動き適応 IP 変換について解説しよう．
● 動き検出型適応補間
動き適応 IP 変換器の典型的な構成を図 10.12 に示す．「動き検出器」は，映像の状態を解析し，パラメータ α を抽出してこれを補間フィルタ Gα ( z )に与える．補間フィルタ Gα ( z )がパラメータ α に応じて特性を変えるという仕掛けである．動きがなければ時間方向補間，動きがあれば垂直方向補間，
あるいは時間垂直補間となるように設計すればよい．
（1）可変係数補間
以下に Gα (z )の一例を示そう．

Gα (z) = 1 + (1 − α )z T−1 +α 1(z +z 0−1 )2 0

0 ≤ α ≤ 1 …………………………………………………（10.4）

図 10.13 はこのフィルタによる補間の様子を示している．α = 0 のときは時間方向補間，α = 1 のときは垂直方向補間，α = 1/2 のときは時間垂直補間となることを確認できる．
インターレース映像

図 10.12270

第 10 章

プログレッシブ映像

U

Gα ( z )動き検出器

α

動き検出型適応補間 IP 変換の基本構成

動き適応/補償フィルタリング

B −1/2 時間

時間

α /4

1−α

A

α /4
自フィールドの上下隣接画素と前フィールドの同じ位置の画素の垂直線形和（係数可変）

図 10.13 可変係数補間の例

補間画素
C

移動オブジェクト境界に生じるくし状効果（垂直高周波成分）

図 10.14

1

−1/2

垂直

動き検出フィルタ
の係数

くし状効果と動き（くし状部）
検出フィルタ係数（2）動き検出動きの定義により検出器の仕様は変わる．時間方向補間では動きによってくし状の効果が生じるが，この垂直高周波成分の強い領域を動き領域として定義する動き検出フィルタを図 10.14 に示す．
補間画素周辺の画素 A，B，C の重み付け差分の絶対値と非線形変換 T ( x )によって動き検出器を構成
できる．

1
B+C ⎞
A−
α = T⎛⎝Z
2 ⎠ ………………………………………………………………………………（10.5）
ここで，Z は最大値を 1 とするための正規化定数である．例えば，符号なし 8 ビット整数の場合は，
Z = 255 となる．また，0 < x < 1 に対して 0 < T ( x ) < 1 とする．変換 T (・)を 2 値化変換とすれば，ス
イッチング動作になる．なお，パラメータ α は補間画素ごとに検出できるので，補間処理も画素単位で制御できる．
例題 10.4

動き検出型適応補間

一定の速度 (v 0, v 1 )T = ( 2, 2 )T［画素/フィールド］でオブジェクトが並進移動するインターレース
映像に対して動き検出型適応補間 IP 変換を施し，プログレッシブ映像を生成してみよう．また，
動きのない ( v 0, v 1 )T = ( 0, 0)T の場合と比較してみよう．
解以下に MATLAB 上でのコマンド例を示す．ただし，for ループの外側の処理は例題 10.1 の解とほぼ同じになるため，ここでは割愛する．なお，パラメータ α の変換を T(x ) = x 0.25 と与え，垂直方
向補間を優先させている．
for iFrame = 1:nFramesIn
pictureI = frame2im(frameSeq(iFrame));%--- Process for picture0
deintPicture0(2:2:end,:) = ...
pictureI(2:2:end,:);deintPicture0(1:2:end,:) =...% 垂直平均
1/2 * pictureI(2:2:end,:) ...
+ 1/2 * [pictureI(2,:) ; ...
10.2

動き適応 IP 変換

271

pictureI(2:2:end-2,:)];
alphaMap0 = abs( (... % 動き検出
double(previousField) ...
- double(deintPicture0(1:2:end,:))...
)/255 );
alphaMap0 = alphaMap0.^.25; % T(.)
deintPicture0(1:2:end,:) = uint8(...
(1-alphaMap0) .* ... % 適応補間
double(previousField) ...
+ alphaMap0 .* ...
double(deintPicture0(1:2:end,:)));
previousField = pictureI(2:2:end,:);%--- Process for picture1
deintPicture1(1:2:end,:) = ...
pictureI(1:2:end,:);deintPicture1(2:2:end,:) =...% 垂直平均
1/2 * pictureI(1:2:end,:) ...
+ 1/2 * [pictureI(3:2:end,:) ; ...
pictureI(end-1,:)];
alphaMap1 = abs( (...

% 動き検出double(previousField) ...
- double(deintPicture1(2:2:end,:))...
)/255 );
alphaMap1 = alphaMap1.^.25; % T(.)
deintPicture1(2:2:end,:) = uint8(...
(1-alphaMap1) .* ... % 適応補間
double(previousField) ...
+ alphaMap1 .* ...
double(deintPicture1(2:2:end,:)));
previousField = pictureI(1:2:end,:);%aviObj = addframe(aviObj, ...
im2frame(deintPicture0,gray(256)));
aviObj = addframe(aviObj, ...
im2frame(deintPicture1,gray(256)));end
272

第 10 章動き適応/補償フィルタリング

（a）(v 0，v 1)T ＝(2，2)T

図 10.15（b）(v 0，v 1)T ＝(0，0)T

動き検出型適応補間の結果

図 10.15 に処理後のオブジェクト部を拡大して示す．動領域においては，くし状効果の抑圧を確認できる．また，映像からは静止領域のちらつきの抑圧を確認できる．
なお，ここで紹介した動き検出法には問題がある．動きが原因ではない垂直高周波成分も動きとして検出してしまう．結果として，静止領域の垂直高周波成分を過剰に平滑化することになる．前後フィールド間の差分を利用して問題を解消するなど，改善の余地がある．
実習 10.4

動き検出型適応補間

M-file ： practice10̲4.m
オブジェクトの移動速度（velocity）を変えて試してみよう．また，例題 4.9 で紹介したインターレース映像 mobile.cif に対して動き検出型適応補間を施し，プログレッシブ化してみよう．
● 時間垂直メディアン補間
時間垂直メディアン補間では，図 10.16 に示すように，時間方向，垂直方向の周辺画素の中央値（メディアン値）を補間画素値とする．補間画素値が領域の状態に依存して選択される．画素 B，C と大きく異なる値を持てば，前フレームの画素 A が選択されることはない．従って，動きのある場合は
時間方向補間が行われないため，動き検出型適応補間と類似の効果を期待できる．
例題 10.5

時間垂直メディアン補間

一定の速度 (v 0, v 1 )T = ( 2, 2 )T［画素/フィールド］でオブジェクトが並進移動するインターレース
映像に対して時間垂直メディアン補間 IP 変換を施し，プログレッシブ映像を生成してみよう．また，動きのない ( v 0, v 1 )T = ( 0, 0 )T の場合と比較してみよう．
10.2

動き適応 IP 変換

273

C
A
B

図 10.16
時間垂直メディアン補間の例

時間

median(A,B,C)

自フィールドの上下隣接画素と垂直 前フィールドの中央値

解以下に MATLAB 上でのコマンド例を示す．ただし，for ループの外側の処理は例題 10.1 の解とほぼ同じになるため，ここでは割愛する．

for iFrame = 1:nFramesIn
pictureI = frame2im(frameSeq(iFrame));%--- Process for picture0
deintPicture0(2:2:end,:) = ...
pictureI(2:2:end,:);deintPicture0(1:2:end,:) = ...
threeNeighborMedian(...
pictureI(2:2:end,:),...
previousField,...
[ pictureI(2,:) ; ...
pictureI(2:2:end-2,:)] );previousField = pictureI(2:2:end,:);%--- Process for picture1
deintPicture1(1:2:end,:) = ...
pictureI(1:2:end,:);deintPicture1(2:2:end,:) = ...
threeNeighborMedian(...
pictureI(1:2:end,:),...
previousField,...
[ pictureI(3:2:end,:,:) ; ...
pictureI(end-1,:,:)] );previousField = pictureI(1:2:end,:);%aviObj = addframe(aviObj, ...
im2frame(deintPicture0,gray(256)));
aviObj = addframe(aviObj, ...
274

第 10 章動き適応/補償フィルタリング

（a）(v 0，v 1)T ＝(2，2)T

図 10.17（b）(v 0，v 1)T ＝(0，0)T

時間垂直メディアン補間の結果

im2frame(deintPicture1,gray(256)));end
なお，threeNeighborMedian 関数を

function outputField = ...
threeNeighborMedian(field1, field2, field3)%
fieldSize = size(field1);
outputField = median( [field1(:) field2(:) field3(:) ], 2);
outputField = ...
reshape(outputField,fieldSize);と定義する．図 10.17 に処理後のオブジェクト部を拡大して示す．動領域，静止領域共に良好な結果が得られている．
時間垂直メディアン補間は簡便でよい性能が与えられるが，斜め線や曲線がギザギザに補間されるなど，ジャギの問題がある．
実習 10.5

時間垂直メディアン補間

M-file ： practice10̲5.m
オブジェクトの移動速度（velocity）を変えて試してみよう．また，例題 4.9 で紹介したインターレース映像 mobile.cif に対して時間垂直メディアン補間を施し，プログレッシブ化してみ
よう．
10.2

動き適応 IP 変換

275

10.3

動き推定

映像の処理に動きの解析は欠かせない．動き適応 IP 変換では動きを検出してこれを利用したが，フレーム間の動きの量を利用する動き補償 IP 変換を利用すると，より良い画質が得られる可能性をもつ．動きの量を利用するためには動き推定（ME ： Motion Estimation）
が必要になるが，これには，• ブロック・マッチング法• 階層的ブロック・マッチング法• 画素再帰法• オプティカル・フロー法など，さまざまな手法が存在する．本節では，映像符号化の世界で広く利用されているブロック・
マッチング法，特にアルゴリズムが簡単な全探索ブロック・マッチング法について解説しよう．
● 全探索ブロック・マッチング法
ブロック・マッチング法は，あるマッチング評価式に従ってフレーム間でブロックごとの類似性を評価し，最も類似したブロックの位置を動きベクトルとする．図 10.18 に概要を示そう．
演算コストや推定精度を改善するために，ブロック・マッチング法にもさまざまなバリエーションが存在する．

• 探索法による違い：全探索，3 ステップ探索，ダイヤモンド探索など• マッチング評価による違い：差分絶対値和，自乗誤差和など
全探索ブロック・マッチング法は演算コストは高いが，最も単純なブロック・マッチング法である．探索窓内の候補ブロックのすべてと現ブロックの間で評価を逐一行う．
マッチング評価関数を f (・)，探索窓内の候補ベクトルを d = (d0, d1)T とすると，動きベクトル d̂ =(d̂0, d̂1 )T は，dˆ = arg min f (d) ………………………………………………………………………………………（10.6）d∈Sと表現される．ここで S は探索窓内のすべての候補ベクトルの集合である．式（10.6）は f (d)を最小動き（対応）ベクトル
参照フレーム（前フレーム）Frame k −1

d0
d1

探索窓

現フレーム
Frame k現ブロック

図 10.18276

第 10 章ブロック・マッチング法の概要

動き適応/補償フィルタリング

類似したブロックを
探索窓内から探す

d1

d0

−1

0

1

−1

5

3

7

1

0

4

2

6

2

1

5

0

3

3

3

3

4

1

図 10.19

探索窓

0

4

2

6

現ブロック

ブロック・マッチング法の例（min）にする引き数 (arg)d ∈ S を動きベクトル d̂とすること意味する．
図 10.19 にブロック・サイズ 2 × 2，探索範囲−1 < d0 < 1，−1 < d1 < 1 の例を示す．このとき S は，

S = { ( −−11 ), ( −01 ), ( −11 ), ( −01 ), ( 00 ), ( 01 ), ( −11 ), ( 10 ), ( 11 )}となる．
● マッチング評価
マッチング評価 f (d)としてよく利用される二つの例を示そう．
（1）自乗誤差和（SSE）
自乗誤差和（SSE ： Sum of Squared Error）
は，差分エネルギを評価する式

f SSE (d) = ∑ {x ( kn ) − x ( kn−+d ) }2 ………………………………………………………………………（10.7）n∈Bによって定義される．なお，B は現ブロック内の画素位置の集合，lは現フレームと参照フレームの時間差である．
自乗誤差和は，次に紹介する差分絶対値和に比べて良い品質を与える．一方，2 乗の計算を要する
ため，演算コストが高い．
（2）差分絶対値和（SAD）
差分絶対値和（SAD ： Sum of Absolute Difference）
は，

f SAD (d) = ∑ | x ( kn ) − x ( kn−+d ) | …………………………………………………………………………（10.8）n∈Bと定義される．自乗誤差和に比べて演算コストが低く，LSI 実装（集積回路による実現）にも適している．このため，映像符号化を中心に利用されている．
例題 10.6

全探索ブロック・マッチング法

図 10.19 に示す 2 × 2 の現ブロックに最も近い 2 × 2 のブロックを探索窓内から探し，動きベクトルを推定しよう．ただし，差分絶対値和（SAD）を評価式とした全探索ブロック・マッチング法を利用しよう．
10.3

動き推定

277

解
左上から順に差分絶対値和 f SAD (d)を計算すると，以下のようになる．
f SAD ( −−11 ) = | 0 − 5 | + | 4 − 3 | + | 2 − 4 | + | 6 − 2 | = 12

f SAD ( −01 ) = | 0 − 3 | + | 4 − 7 | + | 2 − 2 | + | 6 − 6 | = 6
f SAD ( −11 ) = | 0 − 7 | + | 4 − 1 | + | 2 − 6 | + | 6 − 2 | = 17
f SAD ( −01 ) = | 0 − 4 | + | 4 − 2 | + | 2 − 5 | + | 6 − 0 | = 15
f SAD ( 00 ) = | 0 − 2 | + | 4 − 6 | + | 2 − 0 | + | 6 − 3 | = 9
f SAD ( 10 ) = | 0 − 6 | + | 4 − 2 | + | 2 − 3 | + | 6 − 3 | = 12
f SAD ( −11 ) = | 0 − 5 | + | 4 − 0 | + | 2 − 3 | + | 6 − 3 | = 13
f SAD ( 01 ) = | 0 − 0 | + | 4 − 3 | + | 2 − 3 | + | 6 − 4 | = 4
fSAD(11) = | 0 − 3 | + | 4 − 3 | + | 2 − 4 | + | 6 − 1 | = 11最小の差分絶対値和を与える d が動きベクトルの推定値となるので，d̂ = ( 0, 1 )T となる．
この動きベクトル d̂は実際の変位と逆を向いている．さらに，探索窓内の最もマッチしたブロックの位置を示しているだけで，実際の動きを反映しているとは限らない．d̂は対応ベクトルと呼ぶのがふさわしいが，本書では誤解のないことを前提に動きベクトルという呼び方を用いる．
例題 10.7

全探索ブロック・マッチング動き推定

一定の速度( v 0, v 1 )T = ( 2, 2)T［画素/フィールド］でオブジェクトが並進移動するプログレッシブ
映像の隣接する 2 フレーム間で動き（対応）
ベクトル場を推定しよう．
解以下に MATLAB 上でのコマンド例を示す．
% 速度ベクトル（垂直，水平）
velocity = [2 2];% 探索パラメータ（構造体に保持）
me.mbSize = [16 16]; % ブロックサイズ
me.searchRegion = ...
[ -7 7 ... % 探索範囲（垂直）-7 7 ]; % 探索範囲（水平）% フレーム画像の準備
pictureObj = ...
imread('./data/squareandgauss.tif');pictureBg = ...
imread('./data/background.tif');% 参照フレームの設定
278

第 10 章動き適応/補償フィルタリング

referenceFrame = pictureObj + ...
uint8(not(pictureObj)) .* pictureBg;% 現フレームの設定
pictureObj = ...
circshift(pictureObj, velocity);
currentFrame = pictureObj + ...
uint8(not(pictureObj)) .* pictureBg;
me.frameSize = ... % フレーム・サイズ
size(currentFrame);% 動きベクトル場の推定
mvField = fullSearchBlockMatchingMe(...
referenceFrame, currentFrame, me);% 現フレームの表示（動きベクトル場が見やすいよう加工）
imshow(... % もしくは，imshowcq(...
(double(currentFrame)/510+.5).^.25)
hold on% 動きベクトル場の表示[n0,n1] = ndgrid(...
me.mbSize(1)/2:me.mbSize(1):...
me.frameSize(1),...
me.mbSize(2)/2:me.mbSize(2):...
me.frameSize(2));
d0 = mvField(:,:,1);d1 = mvField(:,:,2);
quiver(n1,n0, ...
-d1,-d0,... % 対応ベクトルを反転表示'LineWidth',2)hold off
図 10.20 に結果を示そう．移動オブジェクトの周辺に動き（対応）ベクトルが検出されている様子が分かる．
上のコマンド例では動きベクトル場の推定に，fullSearchBlockMatchingMe 関数を利用している．以下にプログラムを示そう．

function mvField = ...
10.3

動き推定

279

図 10.20

全探索ブロック・マッチング動き推定の結果

fullSearchBlockMatchingMe(...
referenceFrame, currentFrame, me)% 動きベクトル場の探索開始
iMbRow = 1;

% ブロックの行インデックス

for iRow = 1:me.mbSize(1):me.frameSize(1)iRowTop = iRow;
iRowBottom = iRowTop + me.mbSize(1) - 1;
iMbCol = 1; % ブロックの列インデックス
for iCol = 1:me.mbSize(2):me.frameSize(2)iColLeft = iCol;
iColRight = iColLeft + me.mbSize(2) - 1;
% 現ブロックの切り出し
currentBlock = currentFrame(...
iRowTop:iRowBottom, ...
iColLeft:iColRight);% 動きベクトル場の推定
mvField(iMbRow,iMbCol,1:2) = ...
subSearch(...
referenceFrame, ...
currentBlock,...
[iRowTop iColLeft], me);iMbCol = iMbCol + 1;
end
280

第 10 章動き適応/補償フィルタリング

iMbRow = iMbRow + 1;
end%% ブロックごとの処理（サブ関数）
function mv = subSearch(...
referenceFrame, currentBlock, ...
iTopLeft, me)%
iRowTop = iTopLeft(1);iColLeft = iTopLeft(2);% 動きベクトルの探索開始
minimumSad = Inf; % ∞に初期化
for d0 = me.searchRegion(1):me.searchRegion(2)iRowTopInRefFrame = iRowTop + d0;
iRowBottomInRefFrame = ...
iRowTopInRefFrame + me.mbSize(1) - 1;
for d1 = me.searchRegion(3):me.searchRegion(4)iColLeftInRefFrame = iColLeft + d1;
iColRightInRefFrame = ...
iColLeftInRefFrame + me.mbSize(2) - 1;
% 探索範囲をフレーム内に限定
if ( iRowTopInRefFrame > 0 ...
&& iColLeftInRefFrame > 0 ...
&& iRowBottomInRefFrame ...
<= me.frameSize(1) ...
&& iColRightInRefFrame ...
<= me.frameSize(2) )% 候補ブロックの切り出し
candidateBlock = ...
referenceFrame(...
iRowTopInRefFrame:...
iRowBottomInRefFrame,...
iColLeftInRefFrame:...
iColRightInRefFrame);currentSad = ...% 差分絶対値和
sum(abs( currentBlock(:) - candidateBlock(:) ));if (currentSad < minimumSad)
10.3

動き推定

281

mv = [d0 d1]; % 更新
minimumSad = currentSad;
elseif ( d0 == 0 && d1 == 0 &&...
currentSad == minimumSad )% 評価が一致した場合[0 0] を優先
mv = [0 0];
end
end
end
end
この関数は，• 与えられた現フレーム（currentFrame）を重複のない 16 × 16 のブロックに分割• それぞれのブロック（currentBlock）に対して，参照フレーム（referenceFrame）内に − 7 ≦d0 ≦ 7，− 7 ≦ d1 ≦ 7 の探索範囲（searchRegion）を設定• 動きベクトル場の推定を行う．
実習 10.6

全探索ブロック・マッチング法

M-file ： practice10̲6.m
オブジェクトの移動速度（velocity）やブロック・サイズ（me.mbSize），探索範囲を（me.
searchRegion）を変えて，動きベクトル場の推定を試してみよう．なお，ブロック・サイズはフレームを整数分割できるように設定しよう．
（3）推定方向
これまでに解説した動き推定では，過去のフレームに探索窓を設定した．フレーム・バッファを用いると，現在のフレームよりも後の時刻のフレーム，すなわち未来のフレームに探索窓を設定することもできる．図 10.21 に示すように，動きベクトルは，過去のフレームを参照した場合は前方ベクトル（Forward Vector），未来のフレームを参照した場合は後方ベクトル（Backward Vector）と呼ばれる．後方ベクトルを導入すると動き補償の性能が向上する．そのため，後方ベクトルは多くの映像符号化において採用されている．動き補償については次節で解説する．
（4）推定精度
動きベクトルを整数位置に制限する必要はない．より細かな動きを推定して利用することで，映像符号化における性能の向上が確認されている．例えば，半画素精度（Half-pel Precision）の動き推定
は次のように実現できる．
1．整数精度にて動きベクトルを推定
282

第 10 章動き適応/補償フィルタリング

どこへ動くか？
Frame k ＋1

どこから動いたか？

Frame kFrame k −1

未来
時間

後方ベクトル

現在
過去
前方ベクトル

図 10.21

推定方向の例ab(a＋b＋c＋d)/4(a＋c)/2

図 10.22
参照画素の補間処理（a，b，c，d は整数位置の画素）cd2．1．で得られた最適なブロックとその境界部を図 10.22 のように線形補間3．2．で得られた補間画素からなる周辺 8 ブロックについてマッチング評価を行い，半画素精度の動きベクトルを推定
本書では，以降，整数精度の動き推定のみを取り扱う．詳細については，ほかの文献を参照されたい．
● 動き補償予測
動き補償予測（Motion-compensated Prediction）では，動き推定によって得られた動きベクトル場と参照フレームから現フレームの予測画像を生成する．映像符号化の世界では，この予測画像が，時間方向の冗長性を圧縮する際に利用されている．後述するように，動き補償予測は IP 変換にも利用できる．
例題 10.8

動き補償予測例題 10.7 の動きベクトル場と参照フレームから動き補償予測フレームを生成し，現フレームと比較してみよう．
解
以下に，MATLAB 上でのコマンド例を示す．ただし，動きベクトル場の推定より前の部分は
例題 10.7 の解と同じため，ここでは割愛する．
10.3

動き推定

283

（a）現フレーム

図 10.23（b）動き補償予測フレーム

動き補償予測のシミュレーション結果% 動きベクトル場の推定
mvField = fullSearchBlockMatchingMe(...
referenceFrame, currentFrame, me);% 動き補償予測
predictedFrame = mcPrediction(...
referenceFrame, mvField, me);% 現フレームの表示
figure(1)imshow(currentFrame) % もしくは，imshowcq
title('Current frame')% 動き補償予測フレームの表示
figure(2)imshow(predictedFrame) % もしくは，imshowcq
title('Predicted frame')
図 10.23（a）に現フレームを，図 10.23（b）に動き補償予測フレームを示す．過去のフレームの移動量が補償され，現フレームに似た画像が与えられる．
上のコマンド例では，動き補償予測に mcPrediction 関数を利用している．この関数は，参照フ
レーム内から動きベクトルで指定される最適なブロックを抽出し，タイルのように並べた画像を予測フレームとする．以下にプログラムを示そう．

function predictedFrame = ...
284

第 10 章動き適応/補償フィルタリング

mcPrediction(referenceFrame, mvField, me)%frameSize = me.frameSize;
mbSize = me.mbSize;% 動き補償開始
iMbRow = 1;
for iRow = 1:mbSize(1):frameSize(1)iRowTop = iRow;
iRowBottom = iRowTop + mbSize(1) - 1;
iMbCol = 1;
for iCol = 1:mbSize(2):frameSize(2)iColLeft = iCol;
iColRight = iColLeft + mbSize(2) - 1;
% 動きベクトルの参照
d = mvField(iMbRow,iMbCol,1:2);% 予測ブロックの位置の計算
iRowTopInRefFrame = ...
iRowTop + d(1);iRowBottomInRefFrame = ...
iRowTopInRefFrame + mbSize(1) - 1;
iColLeftInRefFrame = ...
iColLeft + d(2);iColRightInRefFrame = ...
iColLeftInRefFrame + mbSize(2) - 1;
% 予測ブロックの切り出し
predictedBlock = referenceFrame(...
iRowTopInRefFrame:...
iRowBottomInRefFrame,...
iColLeftInRefFrame:...
iColRightInRefFrame);% 予測フレームの生成
predictedFrame(...
iRowTop:iRowBottom, ...
iColLeft:iColRight) ...
= predictedBlock;
iMbCol = iMbCol + 1;
10.3

動き推定

285

end
iMbRow = iMbRow + 1;end
実習 10.7

動き補償予測M-file ： practice10̲7.m
オブジェクトの移動速度（velocity）やブロック・サイズ（me.mbSize），探索範囲（me.
searchRegion）を変えて，動き補償予測を試してみよう．なお，ブロック・サイズはフレームを整数分割できるように設定しよう．
● 動き推定の問題
映像の動き推定は本質的に困難である．本来，物体や画面の動きを知りたいのだが，実際は見かけ上の動き（Apparent Motion）で代用せざるを得ない．例えば，物体の変位ベクトルは輝度値の変位（対応ベクトル）で代用し，物体の速度ベクトルは輝度値の変化（オプティカル・フロー）で代用する．
これら見かけ上の変位や速度は，実際の変位や速度と異なり，• 空間こう配の欠落（図 10.24（a））• 光源変化の影響（図 10.24（b））
を前提として利用しなければならない．
また，3 次元空間内での物体の動きを 2 次元平面上で推定する際，対応ベクトルが必ずしも存在しないというオクルージョン（Occlusion）問題がある（図 10.25（a））．さらに，ブロック・サイズの大きさも重要である．物体に対してブロック・サイズが小さいと，図 10.25（b）に示すように対応ベクトルが複数存在し，結果として誤った推定が行われてしまう．これをアパーチャ（Aperture）
問題という．
映像符号化への応用では，実際の動きと推定した動きが異なっていても，現フレームと予測フレー
ムの誤差が小さければ問題ない．しかし，後述する動き補償 IP 変換など，動き補償フィルタリングへの応用では，より正確な動き推定が望ましい．本書では取り扱わないが，この問題の改善策として，階層的ブロック・マッチング（HBM ： Hirarchical Block Mathiching）の利用などが挙げられる．

Frame k −1

α [rad/s]

図 10.24

286

Frame k

輝度値一定の円盤が回転見かけ上では変化がない

見かけ上では変化がある（a）空間こう配の欠落（b）光源変化の影響

実際の動きと見かけ上の動きの違い

第 10 章動き適応/補償フィルタリング

Frame k ＋1

Frame k

アパーチャ

隠れる背景

現れた背景

対応ベクトルが存在しない

対応ベクトルが複数存在（a）オクルージョン問題（b）アパーチャ問題

図 10.25 動き推定における問題

10.4

動き補償 IP 変換

動き補償 IP 変換では動き補償により前フィールドの予測を与え，これを現フィールドの補間に利用する．
● 固定係数 IP 変換との関係
動き補償は動作領域の動きを止めることと同じ効果があり，動きの軌跡に沿った補間を与える．
例えば，前フィールドを動き補償予測フィールドに置き換えて時間方向補間を行う操作は，次の補間フィルタを利用することに相当する．
ˆ0ˆ1Gdˆ (z) = 1 + z0− d z1− d zT−1 ………………………………………………………………………………（10.9）
ここで d̂ 0 ，d̂ 1 は，それぞれ推定された動きベクトルの垂直方向成分と水平方向成分である．図10.26（a）に概念図を示そう．また，時間方向補間の代わりに時間垂直補間を行う操作は，次の補間フィルタを利用することに相当する．

Gdˆ (z) = 1 +1 − dˆ − dˆ −1 1 1z z z + ( z + z0−1 ) ……………………………………………………………（10.10）
2 0 1 T 4 001

図 10.26（b）に概念図を示す．
動き補償予測フィールドが正確に与えられれば，時間方向補間は動作領域においても空間解像度を高く保持できる．一方，動き推定の誤りが目立ち，誤差が後のフレームに波及する問題がある．

対応画素

時間

対応画素
1/2

1

時間
1/4
1/4

フレーム画像

垂直（a）時間方向補間

図 10.26

フレーム画像

垂直（b）時間垂直補間

動き補償 IP 変換の概念（d̂ 0 ＝− 1，d̂ 1 ＝ 0 の場合）

10.4

動き補償 IP 変換

287

時間
インターレース映像

1/2

自フィールドの上下隣接画素と予測フィールドの同じ位置の画素の
線形和

1/4
1/4
垂直

時間垂直補間垂直方向補間

予測フィールド

時間
動き補償予測1/2
1/2

プログレッシブ映像

動きベクトル

垂直
現フレーム

動き推定

参照フレーム図 10.27 動き補償時間垂直補間 IP 変換の構成例

時間垂直補間は空間解像度を犠牲にするが，動き推定の誤りを保護する効果が得られる．
● 動き補償時間垂直補間
本節では，動き補償時間垂直補間による IP 変換について調べてみよう．図 10.27 に動き補償時間
垂直補間 IP 変換の構成例を示す．一般に，IP 変換においては，入力がインターレース映像のため
フィールド単位の動き推定に工夫を要する．図 10.27 の構成例では，過去の出力結果が理想的に IP変換（デインターレース処理）されたものと仮定して，これを参照フレームとしている．また，現フレームをフィールドの垂直方向補間で与え，動き推定と動き補償予測を行う．
例題 10.9

動き補償時間垂直補間

一定の速度 ( v 0, v 1 )T = ( 2, 2 )T［画素/フィールド］で並進移動するインターレース映像に対して，
ブロック・サイズ 16 × 16 および 32 × 32 の全探索ブロック・マッチング法を用いた動き補償時間
垂直補間 IP 変換を施し，それぞれプログレッシブ映像を生成してみよう．
解以下に MATLAB 上でのコマンド例を示す．ただし，for ループの外側の処理は例題 10.1 の解とほぼ同じであるため，割愛する．なお，ブロック・サイズなど，動き推定のパラメータ設定を構
造体 me に保持しておくことも必要である．例題 10.6 を参照されたい．
for iFrame = 1:nFramesIn
pictureI = frame2im(frameSeq(iFrame));%--- Process for picture0
deintPicture0(2:2:end,:) = pictureI(2:2:end,:);% 垂直方向補間
deintPicture0(1:2:end,:) = ...
288

第 10 章動き適応/補償フィルタリング

1/2 * pictureI(2:2:end,:)...
+ 1/2 * [ pictureI(2,:) ;...
pictureI(2:2:end-2,:)];
mvField = ...

% 動き推定fullSearchBlockMatchingMe(...
deintPicture1, deintPicture0, me);predictedPicture = ... % 動き補償予測
mcPrediction(deintPicture1, mvField, me);% 時間垂直補間
deintPicture0(1:2:end,:) = ...
1/2 * predictedPicture(1:2:end,:) ...
+ 1/2 * deintPicture0(1:2:end,:);%--- Process for picture1
deintPicture1(1:2:end,:) = pictureI(1:2:end,:);% 垂直方向補間
deintPicture1(2:2:end,:) = ...
1/2 * pictureI(1:2:end,:)...
+ 1/2 * [ pictureI(3:2:end,:) ;...
pictureI(end-1,:)];
mvField = ... % 動き推定
fullSearchBlockMatchingMe(...
deintPicture0, deintPicture1, me);predictedPicture = ... % 動き補償予測
mcPrediction(deintPicture0, mvField, me);% 時間垂直補間
deintPicture1(2:2:end,:) = ...
1/2 * predictedPicture(2:2:end,:)...
+ 1/2 * deintPicture1(2:2:end,:);%aviObj = addframe(aviObj, ...
im2frame(deintPicture0,gray(256)));
aviObj = addframe(aviObj, ...
im2frame(deintPicture1,gray(256)));end
図 10.28 にブロック・サイズ 16 × 16，32 × 32 の場合について，処理後のオブジェクト部を拡大
10.4

動き補償 IP 変換

289

（a）サイズ16×16

図 10.28（b）サイズ32×32

動き補償時間垂直補間の結果（ (v 0, v 1 )T ＝( 2, 2 )T ）して示す．図 10.28（ a）については，動き推定の誤りが視覚的に強調され，好ましくない結果となっている．一方，図 10.28（b）については，図 10.11（a）の結果と比較すると分かるとおり，動き補償の導入により，くし状効果の抑圧が達成されている．
動き補償技術では，動き推定が良好に働くと優れた性能を達成できる一方で，動き推定が誤った
ときの悪影響は大きい．動き推定の正確さの向上に加えて，各種補間技術の切り替えをいかに実現するかが，IP 変換をはじめとする動き補償フィルタリング全般の課題といえる．
実習 10.8

動き補償時間垂直補間

M-file ： practice10̲8.m
オブジェクトの移動速度（velocity）やブロック・サイズ（me.mbSize），探索範囲を（me.
searchRegion）を変えて，動き補償時間垂直補間を試してみよう．なお，ブロック・サイズはフレームを整数分割できるように設定しよう．また，例題 4.9 で紹介したインターレース映像
mobile.cif をプログレッシブ化してみよう．

章末問題
問題 10.1

補間フィルタの周波数振幅応答（MATLAB 演習）式（10.1），（10.2），（10.3）で与えられる各種固定係数補間フィルタ G (z)の周波数振幅応答を freqz2関数で確認してみよう．また，式（10.4）に示される可変係数補間フィルタ Gα (z)の周波数振幅応答についても α を与えて確かめてみよう．
問題 10.2

時間平均補間（MATLAB 演習）

任意のインターレース映像に対して下図に示す時間平均補間 IP 変換を施し，プログレッシブ映像
290

第 10 章動き適応/補償フィルタリング

を生成してみよう．
時間
1/2
1/2
前後フィールドからの平均（線形補間）

垂直問題 10.3

4 近傍時間垂直補間（MATLAB 演習）

任意のインターレース映像に対して下図に示す 4 近傍時間垂直補間 IP 変換を施し，プログレッシブ
映像を生成してみよう．
時間
1/4

1/4

1/4

垂直

問題 10.4

1/4

自フィールドの上下隣接画素と前後フィールドの同じ位置の画素の線形和

4 近傍時間垂直メディアン補間（MATLAB 演習）

任意のインターレース映像に対して下図に示す 4 近傍時間垂直メディアン補間 IP 変換を施し，プロ
グレッシブ映像を生成してみよう．なお，4 点のうち中央 2 点の平均値が中央値となる．
時間

C
A

D
B

median(A,B,C,D)

自フィールドの垂直 上下隣接画素の前後フィールドの中央値

問題 10.5

動き検出パラメータ（MATLAB 演習）

例題 10.4 のパラメータαのマップをフィールドごとに映像として表示し，動領域と静領域の検出が行われているかを確認してみよう．
問題 10.6

エッジ適応空間補間（MATLAB 演習）

任意のインターレース映像に対してエッジ適応空間補間 IP 変換を施し，プログレッシブ映像を生成してみよう．ただし，エッジ適応空間補間は下図に示す X の位置の補間画素を

2
2
2

その他

章末問題

291

と与える．エッジを保存するために空間こう配の低い方向に平均処理を施す．
A

B

C 水平

X
D

E

F

自フィールドの上下ラインから
エッジにそって補間

垂直問題 10.7

自乗誤差和マッチング評価（MATLAB 演習）

マッチング評価式を差分絶対値和（SAD）から自乗誤差和（SSE）に置き換えて，例題 10.6 〜 10.9 と同じ内容を試してみよう．
問題 10.8

動き補償補間フィルタの周波数振幅応答（MATLAB 演習）

式（10.9），（10.10）で与えられる補間フィルタ G d̂ (z)の周波数振幅応答を確認してみよう．d̂1 = 0 とし，d̂0 のみを変えて時間垂直周波数振幅応答を freqz2 関数で表示すればよい．
問題 10.9

動き補償時間方向補間（MATLAB 演習）

図 10.27 の時間垂直補間を時間方向補間に置き換えて，例題 10.9 と同じ内容を確かめてみよう．
問題 10.10

動き補償時間垂直メディアン補間（MATLAB 演習）

図 10.27 の時間垂直補間を時間垂直メディアン補間に置き換えて，例題 10.9 と同じ内容を確かめて
みよう．
参考文献
（1）吹抜敬彦；画像・メディア工学，コロナ社，2002 年．
（2）Gerard De Haan and Erwin B. Bellers ； Deinterlacing - An Overview，Proc. of IEEE，vol.86，no.9，pp.18391857，Sep 1998．
（3）E.B. Bellers and G. De Haan ； De-interlacing: A Key Technology for Scan Rate Conversion ，Elsevier Science，
2000．
（4）Yao Wan, J orn Ostermann Ya-Qin Zhang ； Video Processing and Communications，Prentice Hall，2002．
（5）John W. Woods ； Multidimensional Signal, Image, and Video Processing and Coding，Academic Press，2006．

292

第 10 章動き適応/補償フィルタリング

索引【アルファベット】

IIR ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥48

stem 関数 ‥‥‥‥‥‥‥‥‥‥‥‥23

IIR フィルタ ‥‥‥‥‥‥‥‥‥‥213

switch 文 ‥‥‥‥‥‥‥‥‥‥‥‥22

ADC ‥‥‥‥‥‥‥‥‥‥‥‥‥‥29

imfilter 関数 ‥‥‥‥‥‥‥‥‥88, 98

symmetric ‥‥‥‥‥‥‥‥‥‥‥105

addframe 関数 ‥‥‥‥‥‥‥‥69, 70

imnoise 関数‥‥‥‥‥‥‥‥‥‥‥87

TIFF ‥‥‥‥‥‥‥‥‥‥‥‥‥‥65

applycform 関数 ‥‥‥‥‥‥‥‥‥83

imread 関数 ‥‥‥‥‥‥‥‥‥62, 67

uint16 ‥‥‥‥‥‥‥‥‥‥‥‥‥60

avifile 関数 ‥‥‥‥‥‥‥‥‥‥‥69

imresize 関数 ‥‥‥‥‥‥‥‥‥‥108

uint8 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥60

aviread 関数 ‥‥‥‥‥‥‥‥‥‥‥67

imshow 関数‥‥‥‥‥‥‥‥‥‥‥64

upfirdn 関数 ‥‥‥‥‥‥‥‥‥‥139

BIBO 安定 ‥‥‥‥‥‥‥‥‥‥‥213

imtool 関数 ‥‥‥‥‥‥‥‥‥‥‥64

YCbCr 空間 ‥‥‥‥‥‥‥‥‥‥‥76

CIE 色空間 ‥‥‥‥‥‥‥‥‥‥‥83

imwrite‥‥‥‥‥‥‥‥‥‥‥‥‥65

Z 変換 ‥‥‥‥‥‥‥‥‥‥‥‥‥40

circular ‥‥‥‥‥‥‥‥‥‥‥‥105

imwrite 関数 ‥‥‥‥‥‥‥‥‥‥83

conv2 関数 ‥‥‥‥‥‥‥‥‥‥‥98

JPEG ‥‥‥‥‥‥‥‥‥‥‥‥‥‥65【数字】

conv 関数 ‥‥‥‥‥‥‥‥‥‥‥‥17

KLT ‥‥‥‥‥‥‥‥‥‥‥159, 187

1 次自己回帰過程モデル ‥‥‥‥‥160

DAC ‥‥‥‥‥‥‥‥‥‥‥‥‥‥29

LoG ‥‥‥‥‥‥‥‥‥‥‥‥94, 106

2 分割フィルタ・バンク ‥‥‥‥‥167

DCT ‥‥‥‥‥‥‥‥‥‥‥‥22, 155

logical ‥‥‥‥‥‥‥‥‥‥‥‥‥59

4 近傍高域強調フィルタ ‥‥‥93, 210

DFT ‥‥‥‥‥‥‥‥‥‥‥‥‥‥34

makecform 関数 ‥‥‥‥‥‥‥‥‥83

4 近傍時間垂直補間 ‥‥‥‥‥‥‥291

double ‥‥‥‥‥‥‥‥‥‥‥‥‥60

MATLAB ‥‥‥‥‥‥‥‥‥‥‥15

4 近傍時間垂直メディアン補間 ‥‥291

DTFS ‥‥‥‥‥‥‥‥‥‥‥‥‥34

MAT ファイル ‥‥‥‥‥‥‥‥‥28

4 近傍ラプラシアン・

DTFT ‥‥‥‥‥‥‥‥‥‥‥‥‥33

medfilt2 関数 ‥‥‥‥‥‥‥‥‥‥90

フィルタ ‥‥‥‥‥‥‥91, 106, 210

FFT ‥‥‥‥‥‥‥‥‥‥‥‥‥‥34

movie2avi 関数 ‥‥‥‥‥‥‥‥‥69

8 近傍ラプラシアン・フィルタ‥‥‥92

filter2 関数 ‥‥‥‥‥‥‥‥‥‥‥88

movie 関数 ‥‥‥‥‥‥‥‥‥‥‥68

FIR ‥‥‥‥‥‥‥‥‥‥‥‥‥48, 99

M-th バンド・フィルタ ‥‥‥‥‥136【あ・ア行】

firls 関数 ‥‥‥‥‥‥‥‥‥‥‥‥137

M ファイル ‥‥‥‥‥‥‥‥‥‥‥25

明るさ ‥‥‥‥‥‥‥‥‥‥‥‥‥81

FIR フィルタ ‥‥‥‥‥‥‥‥213, 219

Odd-time DFT ‥‥‥‥‥‥‥‥‥156

鮮やかさ ‥‥‥‥‥‥‥‥‥‥‥‥81

Forsen フィルタ ‥‥‥‥‥‥‥‥‥97

ordfilt2 関数 ‥‥‥‥‥‥‥‥‥‥‥90

アップ・サンプラ ‥‥‥‥‥‥‥‥113

for 文 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥20

padarray 関数 ‥‥‥‥‥‥‥‥‥105

アップ・サンプリング ‥‥‥‥‥‥117

frame2im 関数 ‥‥‥‥‥‥‥‥‥‥83

plot 関数 ‥‥‥‥‥‥‥‥‥‥‥‥23

アナログ-ディジタル変換器 ‥‥‥‥29

fread 関数 ‥‥‥‥‥‥‥‥‥‥‥‥62

plot 表示 ‥‥‥‥‥‥‥‥‥‥‥‥24

アナログ・フィルタ ‥‥‥‥‥‥‥29

freqz2 関数 ‥‥‥‥‥‥‥‥‥‥‥222

Prewitt ‥‥‥‥‥‥‥‥‥‥‥‥‥95

アニメ ‥‥‥‥‥‥‥‥‥‥‥‥‥58

FS ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥33

Prewitt フィルタ ‥‥‥‥‥‥‥‥106

アパーチャ ‥‥‥‥‥‥‥‥‥‥‥286

fspecial 関数 ‥‥‥‥‥‥‥‥‥‥‥88

RAW‥‥‥‥‥‥‥‥‥‥‥‥‥‥65

アンシャープ演算 ‥‥‥‥‥‥‥‥93

FT ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥33

RAW 画像 ‥‥‥‥‥‥‥‥‥‥‥63

アンシャープ・マスキング ‥‥‥‥93

fwrite 関数 ‥‥‥‥‥‥‥‥‥‥‥66

resample 関数 ‥‥‥‥‥‥‥‥‥139

安定判別 ‥‥‥‥‥‥‥‥‥‥‥‥51

gaussian ‥‥‥‥‥‥‥‥‥‥‥‥88

rgb2ycbcr 関数 ‥‥‥‥‥‥‥‥‥77

位相応答 ‥‥‥‥‥‥‥‥‥‥‥‥218

HDTV ‥‥‥‥‥‥‥‥‥‥‥‥‥83

RGB 空間 ‥‥‥‥‥‥‥‥‥‥‥‥81

移動平均フィルタ‥‥‥‥‥‥‥55, 86

help . ‥‥‥‥‥‥‥‥‥‥‥‥‥‥17

SAD ‥‥‥‥‥‥‥‥‥‥‥‥‥277

イメージング ‥‥‥‥‥‥‥‥‥‥118

help i ‥‥‥‥‥‥‥‥‥‥‥‥‥‥17

Shanks の安定定理 ‥‥‥‥‥‥‥214

色あい ‥‥‥‥‥‥‥‥‥‥‥‥‥81

HSI 空間 ‥‥‥‥‥‥‥‥‥‥‥‥80

Sobel/Robarts フィルタ‥‥‥‥‥‥96

色空間 ‥‥‥‥‥‥‥‥‥‥‥‥‥76

HSV 空間 ‥‥‥‥‥‥‥‥‥‥81, 84

SPD ‥‥‥‥‥‥‥‥‥‥‥‥‥‥253

色空間変換 ‥‥‥‥‥‥‥‥‥‥‥84

if 文 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥21

SSE ‥‥‥‥‥‥‥‥‥‥‥‥‥‥277

因果的システム ‥‥‥‥‥‥‥‥‥99

索

引

293

インターポレーション・

可分離システム ‥‥‥‥‥‥‥‥‥99

周期行列 ‥‥‥‥‥‥‥‥‥‥‥‥194

フィルタ‥‥‥‥‥‥‥‥‥123, 136

可分離処理‥‥‥‥‥‥‥‥‥234, 242

縦続接続フィルタ ‥‥‥‥‥‥‥‥126

インターポレータ‥‥‥‥‥‥121, 123

可分離デシメータ‥‥‥‥‥‥‥‥249

周波数応答 ‥‥‥‥‥‥‥‥‥‥‥44

インターレース映像‥‥‥‥‥‥‥261

可分離フィルタ‥‥‥‥‥‥‥‥‥220

周波数解析‥‥‥‥‥‥‥‥‥‥32, 55

インターレース走査 ‥‥‥‥‥‥‥11

可変係数補間‥‥‥‥‥‥‥‥‥‥270

周波数領域処理 ‥‥‥‥‥‥‥‥‥70

インターレース-プログレッシブ

カラー・マップ ‥‥‥‥‥‥‥‥‥58

順序統計フィルタ ‥‥‥‥‥‥‥‥89

変換 ‥‥‥‥‥‥‥‥‥‥‥‥‥11

関数定義 ‥‥‥‥‥‥‥‥‥‥‥‥26

条件分岐 ‥‥‥‥‥‥‥‥‥‥‥‥21

インデックス方式 ‥‥‥‥‥‥‥‥58

完全再構成フィルタ・バンク ‥‥‥167

振幅応答 ‥‥‥‥‥‥‥‥‥‥‥‥218

インパルス ‥‥‥‥‥‥‥‥‥‥‥40

ガンマ特性 ‥‥‥‥‥‥‥‥‥‥‥73

垂直方向補間 ‥‥‥‥‥‥‥‥‥‥265

インパルス応答 ‥‥‥‥‥‥‥‥‥97

ガンマ補正‥‥‥‥‥‥‥‥‥‥72, 84

水平走査 ‥‥‥‥‥‥‥‥‥‥‥‥66

インプレース演算‥‥‥‥‥‥‥‥176

基底画像‥‥‥‥‥‥‥‥‥‥‥‥148

スクリプト ‥‥‥‥‥‥‥‥‥‥‥25

動き‥‥‥‥‥‥‥‥‥‥‥‥‥‥276

基底ベクトル‥‥‥‥‥‥‥‥147, 187

スパース行列分解 ‥‥‥‥‥‥‥‥164

動き検出‥‥‥‥‥‥‥‥‥‥‥‥271

逆変換‥‥‥‥‥‥‥‥‥‥‥‥‥144

正規化度数 ‥‥‥‥‥‥‥‥‥‥‥74

動き検出型適応補間‥‥‥‥‥‥‥270

逆離散空間フーリエ変換 ‥‥‥‥‥216

正規直交行列 ‥‥‥‥‥‥‥‥‥‥146

動き検出パラメータ‥‥‥‥‥‥‥291

境界処理‥‥‥‥‥‥‥‥‥‥103, 106

ゼロ次ホールド‥‥‥‥‥‥‥110, 130

動き推定‥‥‥‥‥‥‥‥‥‥‥‥276

行列 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥17

ゼロ次ホールド処理 ‥‥‥‥‥‥‥140

動き適応 IP 変換 ‥‥‥‥‥‥‥‥270

行列転置 ‥‥‥‥‥‥‥‥‥‥‥‥19

ゼロ次ホールド・フィルタ‥‥‥‥124

動きの量‥‥‥‥‥‥‥‥‥‥‥‥276

近似仕様‥‥‥‥‥‥‥‥‥‥‥‥218

ゼロ値拡張法 ‥‥‥‥‥‥‥‥‥‥103

動き補償時間垂直補間‥‥‥‥‥‥288

近傍処理‥‥‥‥‥‥‥‥‥‥‥70, 85

ゼロ値挿入器 ‥‥‥‥‥‥‥‥‥‥117

動き補償時間垂直メディアン補間‥292

空間領域処理 ‥‥‥‥‥‥‥‥‥‥70

ゼロ値挿入処理 ‥‥‥‥‥‥‥‥‥117

動き補償時間方向補間‥‥‥‥‥‥292

グラフ表示 ‥‥‥‥‥‥‥‥‥‥‥23

遷移域 ‥‥‥‥‥‥‥‥‥‥‥‥‥218

動き補償補間フィルタ‥‥‥‥‥‥292

高域強調フィルタ ‥‥‥‥‥‥‥‥92

先鋭化 ‥‥‥‥‥‥‥‥‥‥‥‥‥91

動き補償予測‥‥‥‥‥‥‥‥‥‥283

高速フーリエ変換 ‥‥‥‥‥‥‥‥34

先鋭化フィルタ ‥‥‥‥‥‥‥‥‥210

映像処理 ‥‥‥‥‥‥‥‥‥‥‥‥10勾配フィルタ ‥‥‥‥‥‥‥‥‥‥94

線形時不変システム ‥‥‥‥‥‥‥44

エッジ適応空間補間‥‥‥‥‥‥‥291

固定係数 IP 変換 ‥‥‥‥‥‥‥‥261

線形性 ‥‥‥‥‥‥‥‥‥‥‥‥‥44

エリアジング‥‥‥‥‥‥108, 113, 204

固有フィルタ設計法 ‥‥‥‥‥‥‥133

線形補間フィルタ‥‥‥‥‥‥124, 126

円対称理想低域通過フィルタ‥‥‥216
エンボス・フィルタ‥‥‥‥‥‥‥106【さ・サ行】

オクルージョン‥‥‥‥‥‥‥‥‥286

最近傍法‥‥‥‥‥‥‥‥‥‥‥‥110オンライン・ヘルプ ‥‥‥‥‥‥‥16

撮像機器 ‥‥‥‥‥‥‥‥‥‥‥‥11【か・カ行】

線形量子化 ‥‥‥‥‥‥‥‥‥‥‥31
全探索ブロック・マッチング法 ‥‥276
阻止域 ‥‥‥‥‥‥‥‥‥‥‥53, 218

差分絶対値和‥‥‥‥‥‥‥‥‥‥277【た・タ行】

散布図‥‥‥‥‥‥‥‥‥‥‥‥‥144

第 1 種 Bessel 関数 ‥‥‥‥‥‥‥‥217

カイザー窓‥‥‥‥‥‥‥‥‥‥‥223

時間垂直補間‥‥‥‥‥‥‥‥‥‥268

大域的定速移動モデル‥‥‥‥205, 211

ガウシアン・フィルタ‥‥‥‥‥‥106

時間垂直メディアン補間 ‥‥‥‥‥273

対称拡張法‥‥‥‥‥‥‥‥‥103, 106

ガウス平滑化フィルタ ‥‥‥‥‥‥88

時間平均補間‥‥‥‥‥‥‥‥‥‥290

対称平行超平面体領域‥‥‥‥‥‥253

可逆圧縮 ‥‥‥‥‥‥‥‥‥‥‥‥82

時間方向フィルタ‥‥‥‥‥‥‥‥101

タイプⅠのポリフェーズ・

可逆のコンポーネント変換 ‥‥‥‥83

時間方向補間‥‥‥‥‥‥‥‥‥‥262

加重移動平均フィルタ‥‥‥86, 88, 106

色差サブサンプリング ‥‥‥‥‥‥77

画像強調 ‥‥‥‥‥‥‥‥‥‥‥‥70

自乗誤差和‥‥‥‥‥‥‥‥‥‥‥277

フィルタ ‥‥‥‥‥‥‥‥‥‥‥132

画像処理‥‥‥‥‥‥‥‥‥‥‥10, 70

自乗誤差和マッチング評価‥‥‥‥292

ダウン・サンプラ ‥‥‥‥‥‥‥‥113

画素値 ‥‥‥‥‥‥‥‥‥‥‥‥‥57

時不変性 ‥‥‥‥‥‥‥‥‥‥‥‥44

ダウン・サンプリング ‥‥‥‥‥‥113

可分離インターポレータ‥‥‥‥‥250

周期拡張法‥‥‥‥‥‥‥‥‥‥‥103

多次元 Z 変換 ‥‥‥‥‥‥‥‥207, 211

294

索

引

フィルタ ‥‥‥‥‥‥‥‥‥‥‥131
タイプⅡのポリフェーズ・

多次元アップ・サンプラ‥‥‥‥‥242

標本化 ‥‥‥‥‥‥‥‥‥‥‥‥‥29

間引き処理 ‥‥‥‥‥‥‥‥‥‥‥113

多次元信号処理‥‥‥‥‥‥‥‥‥189

標本化行列‥‥‥‥‥‥‥‥‥‥‥191

マルチフレーム方式 ‥‥‥‥‥‥‥66

多次元ダウン・サンプラ‥‥‥‥‥234

標本化格子変換フィルタ ‥‥‥‥‥249

マルチレート信号処理‥‥‥‥107, 112

多次元標本化格子変換‥‥‥‥‥‥234

標本化周期 ‥‥‥‥‥‥‥‥‥‥‥29

見かけ上の動き ‥‥‥‥‥‥‥‥‥286

多次元フーリエ解析‥‥‥‥‥‥‥195

標本化定理 ‥‥‥‥‥‥‥‥‥35, 202

ムービー方式 ‥‥‥‥‥‥‥‥‥‥66

多次元マルチレート・システム‥‥258

ファン・フィルタ‥‥‥‥‥‥‥‥259

メディアンフィルタ ‥‥‥‥‥‥‥89

多次元連続 δ 関数 ‥‥‥‥‥‥‥‥202

フィルタ ‥‥‥‥‥‥‥‥‥‥‥‥52

畳み込み演算‥‥‥‥‥‥‥45, 97, 191

フィルタ・バンク‥‥‥‥‥‥‥‥166【や・ヤ行】

単位インパルス信号‥‥‥‥‥190, 207

フーリエ解析 ‥‥‥‥‥‥‥‥‥‥33

有理数倍率レート変換 ‥‥‥‥‥‥132

チェビシェフ多項式‥‥‥‥‥‥‥228

フーリエ級数 ‥‥‥‥‥‥‥‥‥‥33

有理数比標本化格子変換 ‥‥‥‥‥250

地上デジタル放送 ‥‥‥‥‥‥‥‥83

フーリエ変換 ‥‥‥‥‥‥‥‥33, 195

有理数比レート変換‥‥‥126, 133, 137

中心窩 ‥‥‥‥‥‥‥‥‥‥‥‥‥76

複素平面 ‥‥‥‥‥‥‥‥‥‥‥‥41

有理数比レート変換器 ‥‥‥‥‥‥121

直交行列‥‥‥‥‥‥‥‥‥‥146, 186

ブラックマン・ハリス窓 ‥‥‥‥‥37

ユニタリ行列‥‥‥‥‥‥‥‥144, 186

直交変換‥‥‥‥‥‥‥‥‥‥‥‥146

フレーム・インデックス ‥‥‥‥‥66

ユニタリ変換 ‥‥‥‥‥‥‥‥‥‥144

通過域 ‥‥‥‥‥‥‥‥‥‥‥53, 218

フレーム差分処理‥‥‥‥‥‥‥‥209

ディジタル-アナログ変換器 ‥‥‥‥29

フレーム・レート変換‥‥‥‥127, 140【ら・ラ行】

適応処理‥‥‥‥‥‥‥‥‥‥‥‥258

ブロック・マッチング法‥‥‥‥‥276

ラプラシアン・フィルタ ‥‥‥‥‥91

デシメーション・フィルタ‥‥‥‥135

分離処理‥‥‥‥‥‥‥‥‥‥149, 259

離散空間フーリエ変換 ‥‥‥‥‥‥195

デシメータ‥‥‥‥‥‥‥‥‥‥‥121

分離設計法‥‥‥‥‥‥‥‥‥‥‥220

離散コサイン変換 ‥‥‥‥‥‥22, 155

伝達関数 ‥‥‥‥‥‥‥‥‥‥‥‥44

平滑化処理 ‥‥‥‥‥‥‥‥‥‥‥86

離散時間ウェーブレット変換 ‥‥‥182

トゥルー・カラー方式 ‥‥‥‥‥‥59

平滑化フィルタ‥‥‥‥‥‥‥‥‥201

離散時間信号 ‥‥‥‥‥‥‥‥‥‥29

平均フィルタ‥‥‥‥‥‥‥‥122, 126

離散時間フーリエ級数 ‥‥‥‥‥‥34

ベクトル ‥‥‥‥‥‥‥‥‥‥‥‥17

離散時間フーリエ変換‥‥‥‥‥33, 43

ナイキスト・フィルタ‥‥‥‥‥‥136

変換係数‥‥‥‥‥‥‥‥‥‥‥‥144

離散フーリエ変換 ‥‥‥‥‥‥34, 196

ナイキスト（M）フィルタ ‥‥‥136, 258

変換符号化‥‥‥‥‥‥‥‥‥‥‥150

理想フィルタ‥‥‥‥‥‥121, 123, 126

ノーブル恒等変換‥‥‥‥‥‥‥‥130

方形標本化 ‥‥‥‥‥‥‥‥‥‥‥57

利得 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥55

方形窓 ‥‥‥‥‥‥‥‥‥‥‥‥‥37

リフティング手法 ‥‥‥‥‥‥‥‥175【な・ナ行】【は・ハ行】

方形理想低域通過フィルタ ‥‥‥‥214

リプル ‥‥‥‥‥‥‥‥‥‥‥‥‥52

倍精度浮動小数点 ‥‥‥‥‥‥‥‥60

ポリフェーズ行列‥‥‥‥‥‥‥‥187

量子化‥‥‥‥‥‥‥‥‥‥‥‥31, 58

バイナリ ‥‥‥‥‥‥‥‥‥‥‥‥59

ポリフェーズ実現‥‥‥‥‥‥172, 260

量子化ステップ ‥‥‥‥‥‥‥‥‥31

配列表現 ‥‥‥‥‥‥‥‥‥‥‥‥58

ポリフェーズ分解‥‥‥‥‥‥‥‥130

輪郭抽出 ‥‥‥‥‥‥‥‥‥‥‥‥106

ハニング窓 ‥‥‥‥‥‥‥‥‥‥‥37

累乗則変換‥‥‥‥‥‥‥‥‥‥71, 71

非因果的システム ‥‥‥‥‥‥‥‥99【ま・マ行】

非可逆圧縮 ‥‥‥‥‥‥‥‥‥‥‥82

マクレラン変換‥‥‥‥‥‥‥‥‥227

レート変換器 ‥‥‥‥‥‥‥‥‥‥121

ヒストグラム処理 ‥‥‥‥‥‥‥‥73

マスク ‥‥‥‥‥‥‥‥‥‥‥‥‥85

レート変換フィルタ‥‥‥‥‥‥‥133

ヒストグラム均等化 ‥‥‥‥71, 73, 84

マスク係数 ‥‥‥‥‥‥‥‥‥‥‥86

レギュラリティ‥‥‥‥‥‥‥185, 187

非分離システム ‥‥‥‥‥‥‥‥‥99

マッチング評価‥‥‥‥‥‥‥‥‥277

ロスレス変換 ‥‥‥‥‥‥‥‥‥‥82

非分離処理‥‥‥‥‥‥‥‥‥235, 243

窓関数‥‥‥‥‥‥‥‥‥‥‥‥37, 55

非分離標本化格子変換‥‥‥‥‥‥253

窓関数法‥‥‥‥‥‥‥‥‥‥‥‥222【わ・ワ行】

非分離有理数比標本化格子変換‥‥260

間引き‥‥‥‥‥‥‥‥‥‥‥‥‥107

ワークスペース ‥‥‥‥‥‥‥‥‥27

表示機器 ‥‥‥‥‥‥‥‥‥‥‥‥11

間引き器‥‥‥‥‥‥‥‥‥‥‥‥113

ループ処理 ‥‥‥‥‥‥‥‥‥‥‥20

索

引

295

著者紹介

村松 正吾（むらまつ・しょうご）
新潟大学工学部 電気電子工学科 准教授
1991 年 3 月 東京工業高等専門学校 電子工学科 卒業
1993 年 5 月 東京都立大学工学部 電気工学科 卒業
1995 年 3 月 同大学大学院工学研究科 電気工学専攻 修士課程 修了
1996 年 12 月 同大学大学院工学研究科 電気工学専攻 博士課程 中退
1997 年 1 月 同大学工学部 電子・情報工学科 助手
1999 年 10 月 新潟大学工学部 電気電子工学科 助手
2001 年 2 月 同大学工学部 電気電子工学科 助教授
2003 年 10 月〜 2004 年 9 月 イタリア フローレンス大学 文部科学省在外研究員
現在に至る
学位：
博士
（工学）［1998 年 11 月 東京都立大学］
主な研究：
信号処理，特に映像符号化，映像解析，LSI アーキテクチャの研究に従事．
主な著書：
貴家仁志，村松正吾；マルチメディア技術の基礎 DCT 入門，CQ 出版社，1997 年．
●本書記載の社名，製品名について−本書に記載されている社名および製品名は，一般に開発メーカの登録商標です．なお，本文中では TM，®，©の各表示を明記していません．
●本書掲載記事の利用についてのご注意−本書掲載記事は著作権法により保護され，また工業所有権が確立されている場合があります．したがって，記事として掲載された技術情報をもとに製品化をするには，著作権者および工業所有権者の許可が必要です．また，掲載された技術情報を利用することにより発生した損害などに関して，CQ 出版社および著作権者ならびに工業所有権者は責任を負いかねますのでご了承ください．
●本書に関するご質問について−文章，数式などの記述上の不明点についてのご質問は，必ず往復はがきか返信用封筒を同封した封書でお願いいたします．ご質問は著者に回送し直接回答していただきますので，多少時間がかかります．また，本書の記載範囲を越えるご質問には応じられませんので，ご了承ください．
R 〈日本複写権センター委託出版物〉
本書の全部または一部を無断で複写複製（コピー）することは，著作権法上での例外を除き，禁じられています．本書からの複製を希望される場合は，日本複写権センター（TEL ： 03-3401-2382）にご連絡ください．

MATLAB による画像＆映像信号処理
2007 年 5 月 20 日

初版発行

© 村松 正吾 2007

著 者
発行人
発行所

村松 正吾
山本 潔
CQ 出版株式会社〠 170-8461 東京都豊島区巣鴨 1-14-2☎ 03-5395-2124（販売部）☎ 03-5395-2148（編集部）
振替
乱丁・落丁本はお取り替えいたします．
定価はカバーに表示してあります．
JAN9784789800000

00100-7-10665

編集担当 中山 俊一
DTP ・印刷・製本 美和印刷㈱Printed in Japan

●本書記載の社名，製品名について ―― 本書に記載されている社名および製品名は，一般に開発メーカーの登録商標です．なお，本文中では TM，(R)，(c)の各表示を明記していません．
●本書掲載記事の利用についてのご注意 ―― 本書掲載記事は著作権法により保護され，また産業財産権が確立されている場合があります．したがって，
記事として掲載された技術情報をもとに製品化をするには，著作権者および産業財産権者の許可が必要です．また，掲載された技術情報を利用することにより発生した損害などに関して，CQ 出版社および著作権者ならびに産業財産権者は責任を負いかねますのでご了承ください．
●本書に関するご質問について ―― 文章，数式などの記述上の不明点についてのご質問は，必ず往復はがきか返信用封筒を同封した封書でお願いいたします．ご質問は著者に回送し直接回答していただきますので，多少時間がかかります．また，本書の記載範囲を越えるご質問には応じられませんので，ご了承ください．

MATLAB による画像＆映像信号処理
2007 年 5 月 20 日 初版発行
2011 年 7 月 1 日
電子版 初版発行(c) 村松 正吾 2007，2011
著 者 村松 正吾
発行所 CQ 出版株式会社
編集担当
電子版担当

中山 俊一
中山 俊一