2008年12月24日水曜日

電子工作 #2 クリスマス用イルミネーションの制作

今はクリスマスシーズン,しかし予定は皆無.そんなあなたにクリスマスイルミネーションを.


こんばんは,今回はクリスマス特集.

というわけで,LEDがチカチカするものを作ろうと思います.単にチカチカするだけではやっぱりつまらないので,こんな機能をつけました.

1.周波数(チカチカする速さ)が可変
2.LEDのひかり方を自由に変えられる

そんなわけで,下のようなブロック図を考えました.


ブロック図

RC発振器は,NOT回路,抵抗,コンデンサのみで作れる発振器です.さらに抵抗(コンデンサ)の値を変えることで,周波数を変えることが出来ます.
シフトレジスタは,クロックが入るたびに,内部のレジスタの値が1ずつずれていきます.これを循環させればLEDの点灯パターンはグルグルと回ります.イルミネーションには最適です.
クリアスイッチは,シフトレジスタの値を全てOFFにします.
ビットスイッチは,押し続けている(ONの状態をキープ)とRC発振器のクロックが立ち上がるたびに,シフトレジスタのあるビットがONになります.あるビットのみONにすることが出来れば,クリアスイッチと組み合わせることにより,LEDの点灯パターンを自由に変えることが出来ます.

で,必要なICですが,シフトレジスタは74164(D-FF)で容易に実現できます.また,RC発振器とスイッチ部は,NOTとNANDのみで構成出来るので,7400と7404が1つずつあれば十分です.

結果,下のような回路図になりました.


回路図

試験的制作なので,細かい部分に気を配っていませんがご容赦を.
RC発振器に関してですが,周期はT=3RCくらいだそうです(参考 CPUの創りかた 渡波 郁著).半固定抵抗は抵抗値を0[kΩ]~300[kΩ]に調整することができるので,周期の調整範囲は1.8[s]~0[s]となります.
クリアスイッチは,74164のCLRが負論理ですので,スイッチがONの時0[V]が入力されるようになっています.
D-FFは,出力をそのままLEDに入力しています.
ビットスイッチ周辺では,QH(レジスタの最後の値)がON,または,ビットスイッチがONの時にQAがHになる(A=B=H)ようにしています.
また,LED16つは赤緑青黄を各4つにしました.

では設計はここらへんで終わりにして,制作に入ります.

基盤は,(安く仕上げたいという思いから)下のサンハヤトユニバーサル基盤ICB-86にしました.


あとは先の回路図をちまちまと半田付けしていくだけです.


ちまちま配線中.配線はあまり得意では無いので,抵抗の切れ端などを上手く利用して,配線する量を最小限にとどめています.写真からも分かりますが,IC3つの間隔がかなり狭いので,電源周りの配線がきつかったです.


電源部へのぶっとい導線.


2[μF]のコンデンサがありませんでしたので,1[μF]のコンデンサを並列につなぎ,容量を2倍にしています.

というわけで…



完成.LEDの配線がやっつけ気味です….

早速光らせました(といっても配線中にテストで光らせましたが…).


これでいいクリスマスが送れそうです.

まとめ

最終的に使用した部品は以下のとおりです.

基盤 *1
抵抗 1[kΩ] *2
半固定抵抗 300[kΩ] *1
積層セラミックコンデンサ 1[μF] *4
電解コンデンサ 100[μF] *1
74HC00 *1
74HC04 *1
74HC164 *1
LED赤 *4
LED緑 *4
LED青 *4
LED黄 *4
タクトスイッチ *2
線材

全体を通して,問題なくスムーズに制作を終えることができました.事前にブレッドボードでテスト回路を組んでいたので,それがよかったのかも知れません.今回の制作から分かったことは…
・ブレッドボードで実験しておくことが大事
・抵抗,コンデンサ,ICなどは多種多量に用意しておくのが良い
・はんだ付けの前に,実際に基盤に部品をはめてみて配置を検討しておくのが良い
・D-FFの使い勝手が良い
です.

ではでは,以上クリスマス特集でした.

~おまけ~



超高輝度青色LED7個点灯

2008年12月22日月曜日

画像処理 #14 領域統合法

今晩は.ついに画像処理も14回目ですが,3つ目の非線形フィルタ領域統合法について.

領域統合法(region unification method)とは類似した特徴量(色)を持ち,空間的に近接した領域に画像を分割するというものです.細かい説明は割愛します.この処理を行うと,領域と領域の境目がはっきりとします.

サンプル画像はFig.1.


Fig.1 サンプル画像
下に処理後の画像を2つ示します.Fig.3の方が領域統合の条件を弱めています.


Fig.2 処理後画像1


Fig.3 処理後画像2

さらにFig.3から輪郭抽出したのがFig.4です.


Fig.4 輪郭抽出

非線形フィルタについては,この辺の紹介にしておきます.

次の画像処理ネタは未定…

2008年12月20日土曜日

電子工作 #1 購入

こんばんは,先日千石電商の通販で色々購入したので,そのメモを.

購入リスト

・抵抗
330Ω*100
1kΩ*100
4.7kΩ*100
10kΩ*100
100kΩ*100
470kΩ*100
・半固定抵抗
5kΩ*40
300kΩ*10
・積層セラミックコンデンサ
0.1μF*50
1μF*20
・電解コンデンサ
100μF*20
・トランジスタ
2SA1015*10
2SC1815*10
・IC
74HC00*10
74HC04*10
74HC123*2
74HC164*2
・ICソケット
平ピン14P*10
平ピン16P*10
・三端子レギュレータ
7805*2
・スイッチ
ミツミ電機タクトSW*40
ミヤマ電器トグルSW(2P水平)*3
・LED
赤*10
緑*10
青*10
黄*20
・基盤
サンハヤト ICB-86*3
サンハヤト ICB-288*3
サンハヤト ICB-96PU*2
サンハヤト ICB-96*2
・ブレッドボード
サンハヤト SRH-10*1
サンハヤト SRH-5*2*1
・電池ボックス(単3*3)*2
・DCジャック
φ2.1*2
・スピーカ
8Ω0.2W*3
・半田*1
・半田吸い取り線*1
・電線*1

この他に関係ないもの(SDカード)も買いました.
結局,最終的な合計金額は\16,422でした.

ちょこちょこいろいろやろうと思うので,報告できればいいと思います.
では.

2008年12月15日月曜日

画像処理 #13 バイラテラルフィルタ

こんばんは.大量更新中.
今回はバイラテラルフィルタについて.

バイラテラルフィルタ(bilateral filter)は,非線形フィルタです.f(i, j)に対応するg(i, j)はExp.1で表されます.


Exp.1 バイラテラルフィルタ

かなりごちゃごちゃとした式です.σ1とσ2はパラメータです.
このフィルタの効果はなかなか面白いです.ある領域の画素値の近いもの同士が,同じ画素値をもつようにまとめられていきます.このフィルタを繰り返し適用するとイラスト風の画像が生成されます.

まず,Fig.1に示すノイズの入った画像で試してみます.


Fig.1 サンプル(ノイズ画像)

この画像に対し,平均化フィルタを適用したものをFig.2,さらにもう一度適用したものをFig.3に示します.平均化されているので,ノイズは低減されていますが,中央縦のエッジがかなり鈍っています.


Fig.2 平均化フィルタ(w=3)を1回適用した画像


Fig.3 平均化フィルタ(w=3)を2回適用した画像

次にFig.1にバイラテラルフィルタを適用したものを,Fig.4に示します.
パラメータ
σ1:25
σ2:25
w:3


Fig.4 バイラテラルフィルタを適用した画像

エッジはそのままでノイズが低減されていることが分かります.

では,普通の画像に対して,バイラテラルフィルタを適用してみます.
Fig.5が元画像です.


Fig.5 サンプル画像
Mona Lisa
Leonardo da Vinci, c. 1503–1506

Fig.5にバイラテラルを繰り返し(4回)適用したものをFig.6に示します.
パラメータ
σ1:25
σ2:25
w:3


Fig.6 バイラテラルフィルタ適用後の画像

元画像が絵ですので,なんとも言えませんが,ノイズが吹っ飛び,全体的な雰囲気が変わっています.

今回はこの辺で.

2008年12月13日土曜日

画像処理 #12 メディアンフィルタ

線形変換が一通り終わったので,非線形フィルタへ…

今回は,メディアンフィルタ(median filter)を紹介します.
このフィルタは,周囲9マスの中央値(median)を出力します.このフィルタには,スパイク状のノイズを除去するという効果があります.スパイクノイズの画素値は周囲の画素値と大きく異なるため,中央値とはならないためです.平均化フィルタでも,スパイクノイズ除去は出来ますが,メディアンフィルタの方が,エッジがあまりなまりません.

実際にノイズがのっている画像に対して適用してみます.

サンプル画像はFig.1です.この画像を見たことがある人は多いと思います.標準テスト・イメージの一つでLena Soderbergという方です.その画像を1/4サイズにし,左半分には1*1ドットの,右半分には2*2ドットのスパイクノイズ(白)をのせています.


Fig.1 サンプル画像

Fig.1に平均化フィルタを適用したものをFig.2,Fig.3に示します.Fig.2では周囲9マスを,Fig.3では周囲25マスを平均化しています.


Fig.2 平均化フィルタ(w=1)


Fig.3 平均化フィルタ(w=2)

スパイクが大きいためか,以外にも2*2ドットのノイズを取りきれていません.

次に,Fig.4にFig.1にメディアンフィルタを適用したものを示します.


Fig.4 メディアンフィルタ

綺麗にノイズを取り除くことができています.また,平均化フィルタに比べ,エッジがはっきりしています.

今回の例で,メディアンフィルタがスパイクノイズ除去に対して強力な効果を発揮することが分かると思います.

では今回はこんな処で.

2008年12月12日金曜日

画像処理 #11 スキュー

こんばんは.線形変換最後の変換,スキューにやってまいりました.
スキューはExp.1, 2の式で表されます.この変換は画像を傾けます.つまり,変換後の画像は平行四辺形になります.


Exp.1 x軸方向スキュー(skewing)


Exp.2 y軸方向スキュー(skewing)

行列式の値は1ですので,面積拡大率は1,底辺*高さが一定なので当たり前ですが.

では,さくっと実行例を.
サンプルはFig.1の画像です.有名な絵ですね.


Fig.1 サンプル画像
Drawing Hands
M. C. Escher, 1948

変換後の画像はFig.2, 3で,それぞれx軸方向30°,y軸方向50°傾けてあります.補間法はバイキュービック補間のみです.


Fig.2 x軸方向へのスキュー30°


Fig.3 y軸方向へのスキュー50°


以上で,線形変換は終わりです.
一応鏡映という変換もありますが,これは回転に近いですので省略.

ちなみに,線形変換以外の変換としては,ユークリッド変換(平行移動+回転),アフィン変換(線形変換+平行移動),射影変換(四角形を任意の四角形に変換)があります.これらの変換は,同時座標を利用することで実現できます.
機会があれば追々説明できればと思います.

では,今回はこの辺で.

2008年12月11日木曜日

画像処理 #10 回転

今回は回転について.
回転は,Exp.1の式で表されます.

Exp.1 回転(rotation)

この変換では,原点を中心にθ回転します.一般的な画像の表現は,左上を原点,x軸が右方向へ正,y軸が下方向へ正,ですので単純に回転させると次の様になります.


Fig.1 単純に回転させた場合

この処理でも問題はありませんが,画像の中心(w/2, h/2)を回転の中心にしたい場合(星がクルクル回るとか)は困ります.つまり,次のようにしたい,ということもあるかと思われます.


Fig.2 上手い回転

ということで,以降にこの変換の方法を記します(と,言っても単純な平行移動です).

元画像に対応する点をv1,回転画像に対応する点をv2とし,
v1=(x1, y1)t
v2=(x2, y2)t
とおいた時.v2からv1を出すのが目標です.

元画像fを考えます.fの幅をw,高さをhとします.
回転後の画像をgとします,まず,gのサイズを決定します.gはfを回転させたものなので,fのサイズと同一にはなりません.
サイズは回転する角度によります.角度によって,サイズを変えるのは変なので,一括して最大となる値に固定してしまいます.
幅が最大というのは,画像の対角線が丁度水平の時です.ですので,幅の最大値は,対角線の長さ√(w^2+h^2)です.
高さが最大の時も同様ですので,結局,一辺が√(w^2+h^2)の正方形で十分です.
r=√(w^2+h^2)とします.

f,gそれぞれの(x, y)の変域は次のようになっています.
f
x1 -> [0,w]
y1 -> [0,h]

g
x2 -> [0,r]
y2 -> [0,r]

それぞれ,画像の中心を回転の中心としたいので,

x1'=x1-w/2 (x1 -> [-w/2,w/2])
y1'=y1-h/2 (y1 -> [-h/2,h/2])

x2'=x2-r/2 (x2 -> [-r/2,r/2])
y2'=y2-r/2 (y2 -> [-r/2,r/2])

とします.

v1=(x1, y1)t
v2=(x2, y2)t
であるので,
w1=v1-(w/2, h/2)t=(x1', y1')t
w2=v2-(r/2, r/2)t=(x2', y2')t

とすれば,Aをdeg°回転の表現行列とした時,

w1=A^(-1)w2

となりめでたくゴールです.v2からv1が求められます.ちなみにv1が(w, h)tの範囲外にあることがありますので,その辺は適宜調整しましょう.

まとめ

パラメータ
画像f - 元画像
幅 - w
高さ - h
画像g - 回転画像
幅 - r
高さ - h
r=√(w^2+h^2)
元画像に対応する点 - v1=(x1, y1)t
回転画像に対応する点 - v2=(x2, y2)t
行列A - deg°回転させる行列

手順
1.(r, r)の画像を用意
2.w1=v1-(w/2, h/2)t
w2=v2-(r/2, r/2)t とする
3.w1=A^(-1)w2でv2からv1を求める
4.(v1がf内にあるとき)v2に対応するピクセルにv1に対応するピクセル値を書き込む

では,実際の変換例を.
今回はFig.3の画像を回転させます.エッシャーの作品です.


Fig.3
Relativity
M. C. Escher, 1953

Fig.4が95°,Fig.5が320°回転させたものです.


Fig.4 95°回転


Fig.5 320°回転

安定して回転出来ていると思います.

では,今回はこんな処で.

2008年12月9日火曜日

画像処理 #9 縮小(補足)

前回紹介した拡大縮小ですが,縮小がすっぽり抜けていたので補足します.
変換式は前回の投稿と同様ですので,処理は単純です.が,たまに縮小後の画像が変になることがあります.

例えば,Fig.1のような画像をsx=0.5,sy=0.5で縮小するとします.ちなみにこの画像は円形ゾーンプレートといってExp.1の式で表されます.中心から遠ざかるにつれて周期が短くなっていきます.


Fig.1 縮小する画像


Exp.1 円形ゾーンプレート

で,単純に縮小した結果がFig.2です.


FIg.2 単純に縮小

端の方に変な模様が発生しています(元画像Fig.1と比較してみてください).この模様を偽パターンといったりするようです.この現象は割とよく見られます.周期的なパターンから周期的に抽出を行うと,新たにパターンが発生してしまうというようです.

ということで,この現象を解決するためにローパスフィルタを使います.
ローパスフィルタとは,周波数フィルタリングの一つで高周波成分を除去するというものです.この辺についてはフーリエ変換とかが入ってきます.とりあえず,今回はフーリエ変換は避けたいので,ローパスフィルタの代わりにガウシアンフィルタを用います.ガウシアンフィルタは,(ガウス分布型)ローパスフィルタを近似しています.

まず,元画像に対しガウシアン(≒ローパス)フィルタを適用します(Fig.3).
そして,その後,縮小を実行します(Fig.4).
処理はこれだけです.

パラメータ:
σ=0.7


Fig.3 ガウシアンフィルタ適用後


Fig.4 縮小

どうでしょうか.Fig.2に比べFig.4では,偽パターンが軽減されているのが分かると思います.この画像は意図的に作成したものですが,実際の画像でもローパスフィルタを適用すれば,このように偽パターンは消えるようです.

以上,縮小についての補足でした.

2008年12月7日日曜日

画像処理 #8 拡大・縮小

前回は,線形変換の紹介のみでしたので,具体的な変換を紹介します.
まずは,拡大・縮小(スケール変換)について.

拡大・縮小は次の式で表されます.

Exp.1 拡大・縮小(スケール変換)

パラメータはsx,syの2つです.
sxが1より小さい : x方向に関して縮小
sxが1より大きい : x方向に関して拡大
syが1より小さい : y方向に関して縮小
syが1より大きい : y方向に関して拡大

以前紹介した補間法では,sx=20,sy=20の拡大をしていたわけです.

Fig.1の画像に対して変換を適用します.

Fig.1 サンプル画像

パラメータは,以下とします.
sx=20
sy=10


Fig.2 ニアレストネイバー


Fig.3 バイリニア補間


Fig.4 バイキュービック補間

Fig.4のバイキュービック補間の鮮明さが,よりはっきりした様に見えます.

今回はこんな処で.

2008年12月6日土曜日

画像処理 #7 線形変換

非線形フィルタをやると明言しつつ,今回は線形変換,
線形変換とは,下の式で表現される変換です.


Exp.1 線形変換(linear transformation)

線形変換では,次のような変換が出来ます.
○拡大・縮小(scaling)
○回転(rotation)
○スキュー(skewing)

画像処理でこのような変換を行うときは,逆行列を求める必要があります.何故かというと,座標(x', y')は必ず離散値で無くてはならないからです.ですので,次のようにします.


Exp.2 逆写像

(x', y')から(x, y)を求めg(x', y')=f(x, y)とします.
この時,xとyは離散値とは限らないので,以前紹介した補間法を用いるわけです.

以上がざっくりとした,線形変換の概要です.
具体例は次回紹介しようと思います.

2008年11月21日金曜日

画像処理 第6回 線形フィルタ(実験)

こんにちは,以前の投稿が長過ぎたため,実際の例を分けることにしました.
では,早速紹介したこれらのフィルタを,サンプル画像に施してみましょう.

サンプルはFig.1です.これまた,数か月前,北海道で撮影したものです.

Fig.1 サンプル画像


Fig.2 平均化フィルタ(3*3)


Fig.3 平均化フィルタ(5*5)


Fig.4 ガウシアンフィルタ(σ=0.7)


Fig.5 ガウシアンフィルタ(σ=2)


Fig.6 微分フィルタ(横方向)


Fig.7 微分フィルタ(縦方向)


Fig.8 プリューイットフィルタ(横方向)


Fig.9 プリューイットフィルタ(縦方向)


Fig.10 ソーベルフィルタ(横方向)


Fig.11 ソーベルフィルタ(縦方向)


Fig.12 2次微分フィルタ(横方向)


Fig.13 2次微分フィルタ(縦方向)


Fig.14 ラプラシアンフィルタ


Fig.15 鮮鋭化フィルタ

微分,プリューイット,ソーベル,2次微分,ラプラシアンの5つのフィルタは,画素値のエッジを検出するものなので,サンプル画像をグレースケールに変換したあと,フィルタを施しています.フィルタリングした後の画素がプラスなら黄色,マイナスならシアン,としています.

これらのフィルタには,どんな効果があるかということが視覚的に分かったでしょうか.
次回は,線形で無い,非線形なフィルタについて紹介したいと思います.