ZuruyasumiNekoのほーむぺーじ



English page click here




掲示板(よかったら書き込んでね)


減色のページへジャンプ


ハーフトーン技術のページへジャンプ


大津の2値化、3値化のページへジャンプ



zuruyasuminekoのホームページ2へジャンプ



このホームページには、うそもたくさんあると思いますので、注意して読んでくださいませ。ではスタート。 理想フィルタに最も近いフィルタによるリサイズソフトと有名なLanczos3リサイズソフトのソースをおいてます。
このスペースは、画像拡大縮小回転と減色と音声のタイムストレッチとピッチシフトとレイトレーシングと分布定数回路の数値計算のページです。

リサイズ、回転、減色、タイムストレッチ、ピッチシフト、分布定数回路の数値計算、レイトレーシングのソフトウェアソースリストをのせておきました。
趣味、研究などにご利用ください。

有理数比の画像の拡大縮小やサンプリングレート変換というのは、WEB上に転がってるソースを見れば実装はできますが、なんでそうなるかはわかりにくいと思います。
また、その学術的説明も今まで整数倍アップサンプラと整数分の1ダウンサンプラで説明されてきましたが、その説明でいざ、実装となると壁があると思います。
そこで、大学工学部レベルの知識があれば、原理もわかって実装もできる説明を試みました。
読者には、行間を埋める知識を要求しますが、今後もっとうまい説明を思いついたら、修正します。
もしわからなければ、制御理論や信号理論の教科書を紐解いてみてください。

1.画像拡大縮小

    拡大、縮小、リサイズ、リサンプル、スケーリング、インターポーレーション、解像度変換、デシメーション、リサンプリング、スケーラー、アップコンバート、ダウンコンバート、アップサンプル、ダウンサンプル、アップサンプリング、ダウンサンプリング、サブサンプル、サブサンプリング、マルチレート、補間 etc.という言葉がありますが全部画像のサイズ変換のキーワードです。

   1.1.空間領域での拡大縮小

         Lanczos3-lobed sinc Filter方式などが高画質拡大縮小アルゴリズムとして一般に知られています。次のリサイズ原理というリンクには、Lanczos3-lobed sinc Filter方式を含めた一般

        の画像拡大縮小方式をサンプリング定理から説明したPDFファイルがあります。是非ご覧下さい。 リサイズ原理

ここで有理数倍縮小の解説を4/5縮小を例にとって説明します。





SIN(x)/xの形の関数は一般にsinc関数と呼ばれており、サンプリング定理を象徴する関数です。この関数を左右に引き伸ばすとそのLPFとしての遮断周波数は低くなります。画像を縮小することは、sinc関数を左右に引き伸ばして畳み込み積分をすることにほかなりません。画像を縮小すればするほど高周波成分は失われていき、極端な場合 1個の点だけで画像をあらわすと全画素の平均つまり直流分になり周波数0の成分だけになります。画像の縮小が帯域制限だと直感的に理解できるたとえです。 そして有理数倍縮小操作というものは、上の図のように係数がステップごとに変化するFIRフィルタという結果になります。またときどきデータを読み飛ばすことも必要です。(拡大ではデータは同じで係数だけかえてもう一度計算ということがあります。)以下は、なぜそうなるか、原理的なところを示す図です。先に、後で述べるサンプリング定理の解説を先に読むことをお勧めします。






サンプリング定理の解説で任意の位置の補間値を求める方法を中心に述べます。








以上のようにサンプリング定理を図式的にあらわすとサンプリングした点以外の場所もサンプリング点から求めることができます。
であれば、sinc関数を左右にひきのばした場合(LPFとしての帯域幅を縮小した場合)でも同じ方法でサンプリング点以外の場所を
求められそうです。
拡大の場合は、前者のとおり、縮小の場合、エイリアス成分をださないために、
次の図のようにSinc関数の零点の間隔が縮小された点の間隔と同じになるようにsinc関数を引き伸ばせばいいわけです。
拡大も縮小も点と点の間隔の広いほうにあわせたSinc関数を使えばいいと覚えればいいのです。
零点と零点の距離はπなので、エクセルを使って簡単に有理数倍の拡大縮小の係数を求めることができます。
次の図をじっくり見れば、このわかりにくい文章のいってる意味がわかると思います。

デジタル画像は、アナログ関数とデルタ関数列の積であらわせます。デルタ関数列とアナログ値の積は、インパルス列です。
したがって、理想LPFのインパルス応答はSINC関数ですから、畳み込み演算を図にすると、リサイズ原理の図になります。
少しずつずれたsinc関数をたしたものになります。sinc関数の中心は値1ですが、縦方向に画素値倍されたものになります。
さて、下図の説明ですが、値がわかっている画素を赤線で示しています。これの求めたい位置の画素値への貢献が水色の丸の値です。
sinc関数の中心を、求めたい画素位置に水平移動すると、水色の丸の値を持つのは青色の丸です。
このようにシフトすることによって、sinc関数の中心を求めたい位置にもってくると、sinc関数の中心は値1なので、みごとに
わかってるが画素値とsinc関数の積を足しあわしていけばよい、積和演算のFIRフィルターという結果になるのです。
位相が少しずつずれていくsincのローパスFIRフィルターとなるわけです

5/4拡大では、FIRフィルターの係数セットが5種類で左から順に5画素ステップで繰り返されます。
4/5縮小では、FIRフィルターの係数セットが4種類で左から順に4画素ステップで繰り返されます。
このように、1画素ごとに係数が変わるFIRフィルターを時変FIRフィルターと呼ぶことにします。
昔は、勝手にポリフェーズフィルタと呼んでましたが、一般にポリフェーズフィルタは別の意味で使われます。
ポリフェーズフィルタで検索すれば、たくさんヒットするので、ここでは、説明しません。


   1.2.空間周波数領域での拡大縮小

         理論的にはサンプリング定理の理想フィルタに近い偶関数化DFTリサイザーとDCTリサイザーのCソースを載せました。

        Lanczos3lobed sincフィルターより高画質でリサイズをしたいかたご利用くださいませ。縦方向横方向にそれぞれ

        増やしたい減らしたい画素数を指定すればOK1画素単位で拡大縮小ができます。BMP画像に対応しています。

        JPEG画像をBMPに変換したものを拡大するとJPEG画像の汚さがよくわかります。

        リサイズがおわるのが割とはやいのがDCTリサイザー遅いのが偶関数化DFTリサイザーです。高画質な分時間がかかります。

        このリサイズ方法についてなぜ高画質かを次のリサイズ原理2というリンクにのせました。是非ごらんください
リサイズ原理2




上の図と下の図に間違いをみつけました。奇関数部は虚部になり奇関数になります。図では偶関数になっています。間違いです。





BMP任意サイズ拡大ソフトソース(偶関数化DFTリサイザー)

BMP任意サイズ縮小ソフトソース(偶関数化DFTリサイザー)

BMP任意サイズ拡大ソフトソース(DCTリサイザー)

BMP任意サイズ縮小ソフトソース(DCTリサイザー)

BMP任意サイズ拡大ソフトをDOSプロンプト(コマンドプロンプト)で実行できるようなものを作りました。

使い方は

DCT_UP_RESIZE2 -i nantyara.bmp -o kakudai(.bmpはつけなくていいです)-sizexminus (拡大後の画像と原画像の水平方向の画素数の差 640->720 だったら80を入れる)-sizexminusy (拡大後の画像と原画像の垂直方向の画素数の差 400->480だったら80を入れる)



320x180のgazou.bmp を 400x200のkakudai.bmpにする場合で、Cドライブの直下でやる場合

c:\ にDCT_UP_RESIZE2.exeをコピーして、gazou.bmpもc:\において

C:\>DCT_UP_RESIZE2 -i gazou.bmp -o kakudai -sizexminus 80 -sizexminusy 20 とやれば、c:\にkakudai.bmpができます。

BMP任意拡大ソフト実行ファイル(DCTリサイザー)
BMP任意拡大ソフト実行ファイル(チャープZ変換によるFFTで高速化した偶関数化DFTリサイザー)

縮小のほうもアップしました。

使い方は

DCT_DOWN_RESIZE -i nantyara.bmp -o syukusyou(.bmpはつけなくていいです)-sizexminus (縮小後の画像と原画像の水平方向の画素数の差 720->640 だったら80を入れる)-sizexminusy (縮小後の画像と原画像の垂直方向の画素数の差 480->400だったら80を入れる)



400x200のgazou.bmp を の320x180のsyukusyou.bmpにする場合で、Cドライブの直下でやる場合

c:\ にDCT_DOWN_RESIZE.exeをコピーして、gazou.bmpもc:\において

C:\>DCT_DOWN_RESIZE -i gazou.bmp -o syukusyou -sizexminus 80 -sizexminusy 20 とやれば、c:\にsyukusyou.bmpができます。

BMP任意縮小ソフト実行ファイル(DCTリサイザー)
BMP任意縮小ソフト実行ファイル(チャープZ変換によるFFTで高速化した偶関数化DFTリサイザー)

原画像640x480
DCTリサイザーによる縮小画像376x282
DCTリサイザーによる拡大画像800x600

ゾーンプレートによる縮小の評価画像

原画720x480 SD

DCTリサイザーによる縮小640x420

DCTリサイザーによる縮小352x288 CIF 縞模様の間隔が1画素以下になると灰色になりますこれがフィルターの効果です

2.画像の回転

   画像の回転は語るまでもありません。ソースだけ載せておきます。回転すると、画像は長方形のことが多いので額縁をつけて回転しないとはみでてしまいます。

   ここでは、額縁付けソフトと回転させるソフトを分けています。アルゴリズムはバイリニアとlanczos3 lobed sincです。

BMP画像回転するときの額縁付けソフトソース

BMP画像回転ソフトソース(Bi Lenear)
BMP画像回転ソフトソース(lanczos3 lobed sinc filter)

BMP画像回転するときの額縁付けソフトをDOSプロンプト(コマンドプロンプト)で実行できるようなものを作りました。

使い方は

GAKUBUTI -i nantyara.bmp -o gakubuti(.bmpはつけなくていいですさらに画像サイズがファイル名につきます)



320x180のgazou.bmp を ???x???_gakubuti.bmpにする場合で、Cドライブの直下でやる場合

c:\ にGAKUBUTI.exeをコピーして、gazou.bmpもc:\において

C:\>GAKUBUTI -i gazou.bmp -o gakubuti とやれば、c:\に???x???_gakubuti.bmpができます。

BMP画像回転するときの額縁付けソフト実行ファイル

回転ソフトのほうですが、

使い方は

rotate -i nantyara.bmp -o kaiten -angle 36.5(.bmpはつけなくていいですさらに画像サイズがファイル名につきます)



400x400の400x400_gakubuti.bmp を 31.4度左回りに回転させた画像400x400_kaiten.bmpにする場合で、Cドライブの直下でやる場合

c:\ にrotate.exeをコピーして、400x400_gakubuti.bmpもc:\において

C:\>rotate -i 400x400_gakubuti.bmp -o kaiten -angle 31.4 とやれば、c:\に400x400_kaiten.bmpができます。

BMP画像回転ソフト実行ファイル(バイリニア)

30度回転
125度回転


ちょっと一言

空間領域のリサイズと空間周波数領域のリサイズは、密接な関係があります。
それがどういうことか述べる前にちょっと一言。
まず、空間領域での拡大縮小の話ですが画像の端でFIRフィルタをかけるときには
問題があります。
画像の端ではフィルタの片半分のタップに対応する画素がないことです。
どうしたらよいでしょうか?答えを言うと、鏡像対称になるように画像を拡張するのです。
物理的意味は、これだけでは不明ですが、空間周波数領域の拡大縮小で、DCTリサイズがベストといったことと関係があります。
実は、鏡像展開してFIRフィルタをかけるリサイズを行うことは、空間周波数領域でDCTを使ったリサイズを行うことと本質的に同じことだからです。
鏡像展開っていうのは偶関数展開なのです。
JPEG2000の規格でも画像のはしっこで、鏡像展開しているのは、DCTの考え方と同等です。





Lanczos3,Hanning,Hamming,Blackman,などなどのウィンドウは理想フィルタ関数をコンパクトサポートフィルタにするウィンドウ関数です。
これらを使った有理数倍リサイズソフトをのせます。

しかしこのソフトは研究用で実用的ではありません

水平垂直、有理数倍に対応してます。2/3倍とか4/5倍とかもいけます。
LINUXまたはCygwinを入れてGCCなどでコンパイルすれば動きます。

窓関数をいろいろ選べる縮小リサイズソフトソース

720x480のSDのゾーンプレート画像(上のほうに画像があります)を水平方向、垂直方向ともに2/5縮小した画像です。

Lanczos3 2/5縮小
sinc rectangle window 2/5縮小


sinc rectangle window は水平方向で21tapで(垂直方向5tap)LPFの遮断特性が鋭いので、外側に向かって急激に灰色になってるのがわかる。

比較のために、偶関数化DFTリサイザー、DCTリサイザーの結果ものせます。

DCT 2/5縮小
偶関数化DFT 2/5縮小
偶関数化DFTとDCTは同じにみえますね。TYPE2のDCTをかけTYPE3のDCT(IDCT)でもどしてるので若干違うはずです。0.5画素分ずれているため。
ほぼ理想LPFなので急激に灰色になります。
拡大ではこの性質が、高画質の要因になります。縮小はLanczos3がきれいですね。

ついでだから、拡大ソフトものせちゃいます

窓関数をいろいろ選べる拡大リサイズソフトソース






sinc rectangle window タップ数を自由に変えられる縮小ソフト拡大ソフトの ソースを載せます。現在300タップに設定しています。
DCTリサイズと同等画質の高速バージョン画像縮小ソース

DCTリサイズと同等画質の高速バージョン画像拡大ソース
300tapフィルターで2/5縮小

DCTリサイズとほぼ同じ画質ですね。



最後に、Lanczos3に特化した拡大縮小ソフトをのせます。

実用に使うには、これがいいと思います。

画像サイズをいれるだけで動き簡単です

実用Lanczos3縮小リサイズソフトソース

実用Lanczos3拡大リサイズソフトソース
研究課題

これまで述べてきた方法は、矩形光源(Sinc関数)2次元フーリエ変換の離散化で
碁盤の目のような2次元空間の離散化座標に最も適切な方法である。
点(円)光源(Jinc関数)等方性の関数によるリサイズを実現したいが、碁盤の目のような座標系では実現できないような気がする。
このSincとJincのアプローチの違いの本質を見つけるのが課題である。
相関という言葉がまだわかっていない。
画像は、縦方向と横方向が直交してないらしい。




カルーネンレーブ変換でリサイズできないか?
カルーネンレーブ変換は無相関成分に分解することができる。
離散コサイン変換もカルーネンレーブ変換も多次元空間で座標回転すれば
同じものである。
もしカルーネンレーブ変換でリサイズできれば、最強なような気がする。
研究課題で縦方向と横方向が直交していないといったのは
この変換がひっかかっているからである。
しかし、リサイズ逆カルーネンレーブ変換は、不可能かもしれない。
というか、とんでもない勘違いかもしれないのだ。
離散化空間と連続空間を結ぶサンプリング定理は、重要であることに
変わりはないが、フルーエンシ情報理論のような実用上有用な研究成果
もある。まだまだ、基本画像処理の未来は明るいと思う。
超解像理論について述べて見る。
古典的なのは、ウィーナーフィルタである。本質的には、逆コンボリューション
と同じである。デジタル画像の拡大においては無謀だと今は思っている。0で割る
ことはできないからである。
ベイズの定理を使った確率論からのアプローチもある。RL−Methodなど。
情報がないところから情報をつくるというのは、明らかに無理だと思う。
しかし、ハッブル宇宙望遠鏡など天体写真の高解像度化に利用されているので
なんともいえないところである。
情報理論的に情報は増やせないと思う。
有望なのはもうひとつの超解像、複数枚のボケ画像から解像度をあげる方法
情報理論的に高解像度化は可能である。
したがって複数枚の縮小画像からくっきりとした拡大画像をつくることは可能
だと思われる。それにはそれぞれの画像は微妙に手ぶれしていることが必要である。
たぶん偵察衛星にこの技術は使われていると思われる。

別口で

ひそかにウェーブレット変換のこともたまに考えている。
ドベシーほか2人の考えたウェーブレットカーネルの形状には
フラクタルらしきものが垣間見られる。自己相似性である。
これから、創造的な発明をしていくには、専門にこだわらず
幅広い分野にすべて精通していく必要がありそうだ。

制御の分野でも、ギブス現象の少ないリサンプル理論を考えてる人はいる。
考え方を理解してみたいものだ。
最後に

フーリエ変換には、物理的意味があるのだが、画像処理の世界では 冗長な成分がないDCTのほうが便利である。


同じサンプル数のDFTとDCTの違い

DFTの2倍の周波数分解能をもっているのがDCTである。 DCTでは鏡像展開しているために一番周波数の低い基底正弦波の周波数がDCTと同じサンプル数のDFTの1/2である。従ってこの周波数の正弦波の高調波に分解される。
よってDCTでは、すべての変換係数がナイキスト周波数までのデータとなりDFTのように冗長なデータは発生しない
まあこれは、DFTは複素数の空間成分を複素数の空間周波数成分に変換するので、実数を変換すれば、冗長な成分が発生するのはしかたないのである。
さらに2倍の周波数分解能にすることもできる。同じデータを鏡像展開して偶関数化DCTを行えばいい。
このような鏡像展開をくりかえしていけば、いくらでも周波数分解能はあがっていく。
これによって、空間だけでなく空間周波数領域も離散化されてしまう影響を抑えることができる。
ただしこれは離散ならではの話で、DCTのDだからこその話なのである。



サンプリング定理で注意すべき点

サンプリングする前の関数が無限に続いていなくてはならない
サンプリングにあたり、ナイキスト周波数以下に帯域制限されていなくてはならない。
この2つの条件が満たされていないと、帯域制限された元のアナログ関数は再 構成できない。
ところが実際の関数は、有限である。
音で言えば、1曲の長さで1次元信号はとぎれる。
画像でいえばディスプレイに表示する画像は矩形で有限である。
離散コサイン変換を有限長のサンプルに対して行うと
分解した各余弦波の山もしくは谷が、右と左の端っこに当たる部分にくる。
正弦波の山と谷は微分すると0になる。
すなわち傾き0である。
離散コサイン変換は、有限長の関数を鏡像展開
したものを正弦波に分解する。
このことより、鏡像の対称の中心では、関数の傾きは
0にならなくてはならない。
ところが一般の有限長の関数は
端点で微係数が0にならない
ことが多い。
これは、いいかえると、サンプリング定理でいうところの
帯域制限が、端点でされていないことになる。
DCTリサイズの画質が荒れる原因は、画像の境界
の微係数が0になっていなかったことによる。
帯域制限された関数を有限長できりとった瞬間、帯域制限は、破綻する。
したがって、有限長の関数を帯域制限する場合、鏡像展開して、長さを長くした関数に対して
帯域制限する必要がある。
この場合、つなぎ目のとんがった部分はLPFにより、微係数0に変換される。
という文章をつくりあげたのだが、この辺はあいまいになっていて今後見直してみたい。

バイリニア拡大について

バイリニア拡大は、フルーエンシと同じように、高周波成分を作ることができる。したがって、フルーエンシとはまた違った高周波付加ができ人間には切れのよい拡大画像ができる。しかしバイリニア縮小はエイリアシングを 誘発するので禁じ手である。もちろん、画像のナイキスト周波数よりずっと低い周波数成分しかふくまれない画像に対しては有効である。

のちにわかったこと

縮小した画像を拡大したときだけ、DCTリサイズの画像が乱れることがわかった。DCTリサイズでも、デジカメでとった写真をいきなり拡大する場合には、きれいに拡大できた。

画像の非定常性について

映像情報符号化という本がオーム社からでています。
この本には、自然画像では8画素はなれると相関がなくなることが統計的にいえるということが書いてあります。
これがJPEGで8画素x8画素にわけてDCTをかける理由みたいです。
自然画像というのは、オブジェクトとオブジェクトの境界であるエッジから構成されておりエッジを越えると別の相関になっちゃう。
正弦波が途中で急に位相がかわっちゃった場合を考えるとわかりやすい。
もちろん位相がかわちゃった点がエッジである。 位相が違う同じ周波数の正弦波がエッジを境につながっている場合、フーリエ変換に無理がありそうである。
数学の世界でないとフーリエ変換はできないと思う。
このエッジの存在が画像の非定常性らしい。

だから、フィルタは8タップくらいがいいのではないか?

画像の非定常性の話から、そう思われてくる。Lanczos3拡大ではタップ数は7であるLanczos4拡大では9である。
世間で、LANCZOS3の画質がいいといわれている理由は、タップ数が8に近いからではないか?
だから、窓関数は8タップくらいになる窓をかければなんでもいいような気がする。Hamming窓だろうがBlackmanだろうが。

最後にLanczos4拡大ソフトのソースを載せます。

実用Lanczos4拡大リサイズソフトソース
次の実行ファイルWindowsプログラム初心者の作品です。
問題たくさんありですが一応目的を果たすことができます。

実用Lanczos3縮小リサイズソフト実行ファイル(Windows版)

さらに拡大を付け加えました。
実用Lanczos3拡大縮小リサイズソフト実行ファイル(Windows版)



応用ソフトとして、2つのサイズの違う画像をくっつけるソフトをアップします。
上下にくっつける左右にくっつける。そのとき縮小してくっつける拡大してくっつ
ける。を選べます。

リサイズドッキング実行ファイル(24ビットBMP専用、WINDOWS版)


こんなことができます。

9枚の画像を順次くっつけて最後にリサイズして調整した画像

タイムストレッチについて

2倍のタイムストレッチソフトをフェイズボコーダ法でつくりましたので、説明します。
まず波形を2倍にビヨーンと伸ばします。補間して2倍に伸ばします。補間アルゴリズムは、Lanczos3 windowed sincです。
つぎに、オーバラップを許してFFTのサンプル数ごとにデータを区切っていきます。それぞれのかたまりにハニング窓をかけます。
2倍の場合オーバラップの割合は、75%がいいとおもいます。トレモロがなくなるので。
オーバラップは、データ数で指定するのでFFTのサンプル数8192の場合4096+2048=6144になります。
そして、FFTをかけて、真の周波数を割り出します。次に、通常は周波数成分を周波数2倍の位置にうつして、IFFTを
かけるのですが、初期位相と周波数をきめた正弦波の合成で作っています。合成するときは2倍の周波数にしています。


つぎのリンクは2倍タイムストレッチソフトのソースリストです。
2倍タイムストレッチCソース 44.1kHz STEREO 符号付16bit WAV ONLY


次のソースは、同じく2倍のタイムストレッチができます。前記の正弦波を足し合わせる方法とIFFTを使う方法が選べます。
2倍タイムストレッチCソース 44.1kHz STEREO 符号付16bit WAV ONLY


次のソースは2倍タイムストレッチでIFFT結果をつなぐとき、正弦波の位相を合わせたものです。窓関数のトレモロがでます
2倍タイムストレッチ位相あわせバージョンCソース 44.1kHz STEREO 符号付16bit WAV ONLY


初期バージョンは、声をきれいにタイムストレッチするのでのせておきます。
HammingWindowをかけたFFT結果をすべて2倍の周波数にシフトしてIFFTして、直線クロスフェードさせます。
オーバラップ75%FFTポイント数8192がいい感じで声をタイムストレッチします。
ソースをのせます
2倍タイムストレッチ2倍周波数IFFTクロスフェードCソース 44.1kHz STEREO 符号付16bit WAV ONLY


次のソースは、ピッチシフトをするソフトです。

任意KEYピッチシフトCソース 44.1kHz STEREO 符号付16bit WAV ONLY


任意サイズFFTのアイデア

100サンプルのデータをFFTしたい場合今までは128サンプルのFFTをかけるのですが、余っちゃう28サンプルの部分に0をいれていました。
基底周波数の取り方の問題なのですが、100サンプルを有理数倍リサンプルをして128サンプルにして、FFTをかけて、28個の高周波をのぞいて
(最高周波側から)100サンプルのFFTができたことになります。ただし補間ででる誤差などで、絶対値は、正しくないです。
128個で山と谷1個の最低周波数をあらわしその倍々のスペクトルをもとめるか100個でするかの違いになります。


損失(線路の伝導方向に抵抗分がある。また、線路とGNDの間に漏れコンダクタンスがある)のある一般の分布定数回路の伝送路の応答のシミュレーション(ただし表皮効果は考慮していない)

損失のある分布定数回路過渡応答シミュレータC言語ソース

すぐ上のソフトウェアで、300Ω/mの線路抵抗をもつ、抵抗を無視したときの特性インピーダンスが50Ωの有損失線路の過渡応答の数値計算をした結果を波形表示します。
線路長10cm、終端開放、入力は、単位ステップ、終端での波形です。
ドライバー出力抵抗25Ω
ドライバー出力抵抗50Ω
ドライバー出力抵抗75Ω


アルゴリズム解説 ここに無損失線路のFDTD解法があります。
上記リンクを参照すると無損失線路に電源側出力抵抗と終端抵抗をつないだときの過渡応答の計算の仕方がわかると思います。 有損失化するには、次の式を使います。
誤植(上の式の電圧を求める式の前半の分母は本来GのところがRになってます。)

プログラムの上では次の部分です。
電圧の漸化式は、
*(V+i+1+(N+1)*j)=(*(V+i+(N+1)*j)-dt/C*((*(I+i+(N+1)*j)-(*(I+i+(N+1)*(j-1))))/dz+G/2.0*(*(V+i+(N+1)*j))))/(1.0+dt*G/2.0/C);
電流の漸化式は、
*(I+i+(N+1)*j)=(*(I+i-1+(N+1)*j)-dt/L*((*(V+i+(N+1)*(j+1))-(*(V+i+(N+1)*j)))/dz+R/2.0*(*(I+i-1+(N+1)*j))))/(1.0+dt*R/2.0/L);


次に表皮効果を考えた有損失分布定数線路の過渡応答を計算するプログラムをおきます。
損失のある分布定数回路過渡応答シミュレータC言語ソース(表皮効果を考慮したもの)


入力波形をフーリエ変換して、正弦波に分解したのち、それぞれの正弦波の周波数に対する表皮の深さを求めて、応答をもとめ、たし合わせます。

表皮の深さは、√(2*0.1/(2πfσL))で計算しています。0.1は、おまじないです。透磁率とインダクタンスはディメンジョンが同じですが、一緒にしてはいけません。インダクタンスは導体の形状でかわるが、透磁率は材料定数です。また導体表面から表皮の深さまで、電気が流れ、そこから、導体中心までは電流が流れないとしています。

減衰指数関数の積分は計算してませんので、この仮定が正しいか、調査の必要はあります。

また、ステップ波形は、離散フーリエ変換できませんので、奇関数の1と-1を交番するパルスを与えています。

このプログラムで計算した波形を示します。

条件はR300Ω/m G=0.12モー/m L=3x10^(−7)H/m C=1.2x10^(−10)F/mの無歪線路(有損失線路)

線路長10cm

ドライバ出力抵抗0Ω

終端開放

線路の直径0.2mm

終端で観測した電圧である。

表皮効果を考慮しない有損失線路の応答(ステップ電圧印加)

表皮効果を考慮しない(パルスをフーリエ変換して正弦波に分解して、応答をもとめ、最後に合計する)各周波数ごとの抵抗は同じとする有損失線路の応答(矩形パルス印加)

表皮効果を考慮した(パルスをフーリエ変換して正弦波に分解して、応答をもとめ、最後に合計する)各周波数ごとの実効抵抗は違うとしたときの有損失線路の応答(矩形パルス印加)

注)計算時間の関係上、128次高調波までで打ち切っています。

1670万色→256色減色

Zuruyasuminekoのほーむぺーじ2で展示している画像をつくるソフトウェアのうち、高品質な結果が得られるソフトウェアのソースを公開します。

減色前画像
メディアンカット+KmeansのC言語ソース1(このすぐ下のリンクのソースと一緒にコンパイルしてください)
メディアンカット+KmeansのC言語ソース2(このすぐ上のリンクのソースと一緒にコンパイルしてください)
メディアンカット+Kmeansの画像


4xYUV,分散最大の軸に垂直に大津法で決めた分轄面で分轄(次の分割対象をきめる指標は重心からの距離が最大の分割領域)&Kmeans法のC言語ソース(2013.12.11 ver2 更新)
4xYUV,分散最大の軸に垂直に大津法で決めた分轄面で分轄(次の分割対象をきめる指標は重心からの距離が最大の分割領域)&Kmeans法の画像


4xYUV,分散最大の軸に垂直に大津法で決めた分轄面で分轄(次の分割対象をきめる指標は分散が最大の分割領域)&Kmeans法のC言語ソース(2013.12.11 ver2 更新)
4xYUV,分散最大の軸に垂直に大津法で決めた分轄面で分轄(次の分割対象をきめる指標は分散が最大の分割領域)&Kmeans法の画像


4xYUV,分散最大の軸に垂直に大津法で決めた分轄面で分轄(次の分割対象をきめる指標は分散が最大の分割領域)&Kmeans法を使った1677万色から256色減色ソフトのコマンドプロンプト実行ファイルをアップします。使い方は、4xYUVbokmb.exe -i 入力24bitbmpファイル名 -o 出力ファイル名(拡張子なし) で24bitbmpが8bitbmpに減色変換されます。巨大な画像の場合約1/3にファイルサイズが縮みます。


4xYUV,分散最大の軸に垂直に大津法で決めた分轄面で分轄(次の分割対象をきめる指標は分散が最大の分割領域)&Kmeans法のコマンドプロンプト実行ファイル(2013.12.11 ver2更新)


最新版メディアンカット+KmeansのC言語ソース(2016.1.2)


直上のソースは、さまざまな画像を減色した際に出てきた問題をクリアしたバージョンです。画素数が多いボックスから分割していきます。ボックスの中身が空のボックスは取り除いていきます。画素数が多いボックスから分割するが破綻すると、ボックスの体積が大きい順に分割します。ここまで処理が終わると必ず256色のパレットが選ばれます。ここでKMEANS法でさらに最適化しますが、メディアンカット法は最適化が甘いので、KMEANSの繰り返し処理で、色が減ってしまうことがあります。その場合、乱数を使って新規色を追加してKMEANS繰り返し処理を続行します。50回繰り返し処理を行い、色数が256未満にならなければ、処理が終わって画像出力します。


レイトレーシング

森川譲さんのレイトレーシングソフトウェアRt-vをN88-BASICからC言語に移植、1670万色ビットマップファイル出力するように修正したソフトウェアソース


こちらへ続く

減色

このページのCopyright(著作権)については、うるさいことをいいません。
自由に引用して結構です。リンクも行って構いません。
マルチレート信号処理を身近に感じられるようになれば幸いです。


Special Thanks to Dr. Ken Turkowski, Ohio University, Dr. Takuya Ohura, Dr. Yuji Izawa, Dr. Kazuo Toraichi, Mr. Kazuhiro Mogi, and my daughter. 順不同


アクセスカウンター


ご質問、お問い合わせ、お叱りなどは
zuruyasumineko2002@yahoo.co.jp
まで、お気軽にメールください。



Check google pagerank for fwif8786.web.fc2.com

from 2006.08.06
2006.08.14第1次更新

2006.08.15第2次更新 DOSプロンプト実行ファイルを追加
2006.08.19第3次更新 リサイズ原理2を追加,ゾーンプレート画像を追加
2006.09.13第4次更新 リサイズ原理1,2をpdfのリンクをたどらなくても良いようにした
2006.11.15第5次更新 空間領域の縮小について説明の図を7枚増やした
2006.11.16第6次更新 空間領域の縮小について構成を変更した
2006.12.15第7次更新 ちょっと一言を追加
2006.12.16第8次更新 英語のページを追加
2006.12.19第9次更新 英語のページでDCTリサイズの説明を英語にした
2006.12.19第10次更新英語のページでサンプリング定理の説明を英語にした
2006.12.20第11次更新英語のページ用で4/5縮小の説明を英語にした
2006.12.22第12次更新アナログ波形復元の式の誤記訂正
2007.01.06第13次更新誤差拡散法について記述追加
2007.01.07第14次更新メディアンカット非線形1bit量子化画像を追加
2007.01.15第15次更新1bit線形、非線形量子化のでっかい画像をのっけた
2007.01.19第16次更新本格派メディアンカットのアルゴリズムと画像をのせた
2007.01.19第17次更新CIELAB空間でのメディアンカットのアルゴリズムと画像をのせた
2007.01.20第18次更新拡大ソフトの宣伝を載せた
2007.01.22第19次更新減色画像のサンプルを増やした
2007.01.28第20次更新Lanczos3縮小ソフトのソースをのせた
2007.01.31第21次更新Lanczos3と理想LPFによる縮小画像をのせた
2007.02.01第22次更新DCT,DFT縮小の画像をのせた。Lanczos3拡大ソフトのソースをのせた
2007.02.01第23次更新誤差拡散のソフトのソースをのせた
2007.02.15第24次更新大津の方法での2値化画像をのせた
2007.02.17第25次更新誤差拡散での2値化画像をのせた
2007.03.09第26次更新DCTリサイズと同等画質高速バージヨンCソースと画像をのせた
2007.03.10第27次更新実用Lanczos3拡大縮小Cソースをのせた。いろいろ文章を修正
2007.04.21第28次更新回転ソフトの使用法に抜け(回転角の指定)あり修正、著作権FREEを宣言
2007.05.18第29次更新夢と別口でを追加
2007.06.26第30次更新Lanczos3拡大を高速化,縮小を縮小率大のとき高画質化、縮小率小のとき高速化
2007.06.27第31次更新同じサンプル数のDFTとDCTの違いを追加
2007.07.17第32次更新新しいトピックを追加
2007.07.21第33次更新後記を追加
2007.08.15第34次更新Lanczos4拡大を追加
2007.09.13第35次更新サブホームページをGeocityに新設。5倍拡大の画質比較追加
2007.09.21第36次更新サブホームページに8x8マクロブロックDCT5倍拡大の画像追加
2007.09.29第37次更新サブホームページに4x4マクロブロックDCT5倍拡大の画像追加
2007.10.14第38次更新Windows版Lanczos3縮小プログラム実行ファイルと拡大縮小プログラム実行ファイルをおいた
2007.10.26第39次更新Windows版減色プログラム実行ファイルをおいた
2008.04.29第40次更新Windows版ドッキングリサイズ実行ファイルをおいた
2008.10.21第41次更新理想フィルタにするためのフィルタタップ数の説明を追加
2010.08.17第42次更新誤差拡散の記事を削除、量子化誤差で理想フィルタの記事を削除、その他間違っていると気づいたものを改変
2010.08.18第43次更新サブホームページを整理
2010.09.01第44次更新サブホームページにメディアンカット減色の記事追加
2010.09.07第45次更新サブホームページにメディアンカット初期化Kmeans法減色記事追加
2010.09.09第46次更新サブホームページに分散最大軸に垂直な平面でカット減色法およびそれをKmeansで最適化記事追加
2010.09.11第47次更新サブホームページに分散最大軸に垂直な平面でカット減色法およびそれをKmeansで最適化をYUV空間での記事追加
2010.09.14第48次更新サブホームページに4xYUV空間の分散最大軸で平均と大津法でカットでの減色記事追加
2010.09.19第49次更新サブホームページに減色プログラムの実行ファイルをおいた
2010.10.24第50次更新5/4倍拡大の説明図を追加
2010.10.28第51次更新間違い修正。ぐちゃぐちゃの文章を少し整理
2010.11.30第52次更新4/5倍縮小の説明図を追加
2010.12.02第53次更新序文修正
2011.01.13第54次更新サブホームページの減色プログラムの実行ファイルをVer003に更新
2011.02.20第55次更新説明文追加少々
2011.03.24第56次更新サブホームページに処理に時間がかかるが高品質減色プログラム実行ファイルVer001をおいた
2011.03.30第57次更新説明文追加少々
2011.03.30第58次更新サブホームページに処理に時間がかかるが高品質減色プログラム(誤差拡散抜き)実行ファイルVer001をおいた
2013.02.07第59次更新タイムストレッチ2倍のソフトウェアソースをおいた。任意サイズFFTのアイデアを記載。
2013.02.08第60次更新任意ピッチシフト、任意タイムストレッチ、位相あわせタイムストレッチ、有損失分布定数回路数値計算のプログラムをおいた。
2013.02.11第61次更新メディアンカット+Kmeans法とYUV空間のYを4倍に伸ばした空間で分散最大の軸に垂直に大津法で決めた分轄面で分轄&Kmeans法の1670万色→256色減色ソフトウェアソースを置いた。
2013.02.13第62次更新森川譲さんのレイトレーシングソフトウェアRt-vを言語をN88-BASICからC言語に移植し、24bitトゥルーカラーBMP画像ファイル作成するように改造したプログラムを置いた。
2013.02.15第63次更新有損失分布定数回路数値系算のプログラムバグ修正。(2013.3.27後記。まだバグがあった。)
2013.02.23第64次更新サンプリングレートコンバートがFIRフィルターの原理にもどって考えると位相シフトFIRになることを示した。求めたい位置にsinc関数の中心をおいて分かっている画素値と積和すればよいことを示した。
2013.03.05第65次更新任意長さタイムストレッチ(IFFT方式と正弦波加算方式)のソースがバグっていたので2倍タイムストレッチに変更。
2013.03.05第66次更新周波数2倍シフトIFFT方式(真の周波数を求めない)クロスフェードの2倍タイムストレッチソフトのソースを置いた。
2013.03.27第67次更新有損失分布定数回路数値計算のプログラムバグ修正。(たぶん、直った)
2013.03.29第68次更新有損失分布定数回路数値計算のプログラム完全版公開。
2013.04.11第69次更新ドッキングリサイズMFC42.DLLが足りないというメッセージがでて使えない問題を解消
2013.04.12第70次更新減色、新アルゴリズム(分散最大の領域を分割)のソフトウェアソースを掲載
2013.04.12第71次更新有損失線路過渡応答計算プログラム実行例の波形を掲載
2013.06.04第72次更新有損失線路過渡応答計算プログラムアルゴリズムちょっとだけ説明
2013.06.26第73次更新表皮効果を考慮した有損失線路過渡応答計算プログラムと波形掲載
2013.08.01第74次更新有損失線路過渡応答計算プログラムアルゴリズムの漸化式追加(k+0.5が添え字の式)
2013.09.27第75次更新グラデーション減色結果画像を追加
2013.09.28第76次更新サブホームページに、均等色空間分散大津減色画像を追加
2013.10.18第77次更新4xYUVbokmb.lzhをダウンロードできるようにした。(Windows実行ファイル)
2013.11.03第78次更新サブホームページにGUI_4xYUVbokmb.lzhをダウンロードできるようにした。(Windows実行ファイル)
2013.12.11第79次更新減色ソフトウエアバグ発見のため差し替え、座標軸回転方式を変えた。大津法のソフト2件とコマンドプロンプト実行ファイルを差し替え
2014.07.09第80次更新バグがわかったので、表皮効果を考慮した有損失線路のパルス応答の写真とCソースを差し替え
2014.08.21第81次更新チャープZ変換によるFFTで高速化した偶関数化DFT拡大リサイザーのコマンドプロンプト実行ファイルをおいた。
2014.08.21第82次更新チャープZ変換によるFFTで高速化した偶関数化DFT縮小リサイザーのコマンドプロンプト実行ファイルをおいた。
2014.08.28第83次更新チャープZ変換によるFFTで高速化した偶関数化DFT縮小リサイザーと拡大リサイザーのコマンドログを減らして速度をあげたコマンドプロンプト実行ファイルにおきかえた。
2014.08.31第84次更新チャープZ変換によるFFTで高速化した偶関数化DFT拡大リサイザーのFFTとIFFTルーチンを京大数理研の大浦さんのfft_8g.c 基数2,4,8のcdftに置き換えた実行ファイルに置き換えた。
2014.09.04第85次更新チャープZ変換によるFFTで高速化した偶関数化DFT縮小リサイザーと拡大リサイザーのFFTとIFFTルーチンを京大数理研の大浦さんのfft_sg.c SplitRadixのcdftに置き換えた実行ファイルに置き換えた。
2014.09.09第86次更新Lanczos3で画像回転のソフトウェアのC言語ソースを置いた。
2014.09.14第87次更新サブホームページにGUI_4xYUVbokmb_ver02をおいた。マニア向けベスト減色ソフト誤差拡散抜き
2014.09.20第88次更新ずるねこの画像拡大!3種類から選んでね」テスト版公開
2014.09.25第89次更新サブホームページにGUI_4xYUVbokmmbedをおいた。マニア向けベスト減色ソフト誤差拡散有り
2014.09.28第90次更新サブホームページの減色ソフトを整理し、さらに新しいソフトを置いた(4xYU4xV空間)
2015.01.03第91次更新サブホームページの減色ソフトを整理し、最新にした。Vector対応。
2015.02.24第92次更新サブホームページの減色ソフトのソースCQ2.cのバグ修正をした。
2016.01.02第93次更新RGBメディアンカット+KMEANS法の最新版ソースをアップした。
2019.01.04第94次更新サンプリング定理の図を追加した。
2020.05.06第95次更新減色のページを追加した。(index3.html)
2020.05.06第96次更新減色のページに減色画像を生成するCプログラムダウンロードリンクをつけた。
2020.05.12第97次更新減色のページに誤差拡散無しの画像をのせた。
2021.09.17第98次更新ハーフトーン技術のページを新設
2021.09.19第99次更新大津の2値化、3値化のページを新設
2021.09.19第100次更新GEOCITYのzuruyasuminekoのホームページ2を復活(画像やダウンロードリンクは、消えたまま。ぼちぼち復活させていきます。)
2021.09.19最新更新 大津の2値化、3値化のページにKittlerの2値化を追加

inserted by FC2 system