画像処理プログラミング
今回、CまたはC++を使って下のプログラムを作成しなければいけません。
そこで、さっそく調べてみたのですが、恥ずかしながらさっぱり分かりません。
他の方に、翻訳してもらったのですが日本語すら理解できません。
僕自身プログラミング初心者みたいなものなので、この難題に困っています。
この問題を分かりやすいように解釈してもらえないでしょうか?
できれば、このプログラムを書く上でヒントなども教えていただけると
幸いです。
<英文>
1.Segment the R、G、B partial images from original one
2.Transform the color image to gray level image
3.Mean filter & median filter
4.A user-defined thresholding
5.Histogram equalization
6.Sobel edge detector (vertical/horizontal/combined)
7.Calculate the gradient of the intensity and then threshold to binary image
8.Overlap the result of (7) on the original image
<翻訳してもらったもの>
1ー R(赤).G(緑).B(青).の部分的なイメージをオリジナル信号から区分ける。
2ー カラーイメージをグレーレベルのイメージに変換。
3ー 平均フィルター及び中間フィルター 。
4 ーユーザーの設定によるスレシホルド。
5ー ヒストグラムのイコライゼイション(同等化)。
6ー プリウィットエッジの探知器(バーティカル/ホリゾンタル/コンビネーション)
(又はソベルエッジの探知器)
7 ー輝度の勾配を計算して スレシホルド へ バイナリー画像。←英文が少しおかしい。
8ー(7)の結果とオリジナル信号を重ねる。
ある画像が有ります。
メモリ上に展開された画像データに対し、以下の1~8の処理を行っていきます。
1. Segment the R、G、B partial images from original one
1ピクセルずつ順に処理し、R(赤)、G(緑)、B(青)の色成分を取得します。
2. Transform the color image to gray level image
1で抜き出した色成分を元にグレー画像(256階調)へ変換します。
(カラーからモノクロ画像への変換)
3. Mean filter & median filter
「平均化フィルタ」、「メディアンフィルタ」をかけ、ノイズ成分を除去します。
※どちらも、ノイズを取り除く「空間フィルタ」です。
ノイズ除去に用いられる手法でありますが、ノイズが強い場合、「平均化フィルタ」では完全にノイズを除去することができません。
また、輪郭がぼけてしまうということも起こるので、そういった場合は「メディアンフィルタ」を使用して下さい。
輪郭をくっきり残して、ノイズを除去することができます。
4. A user-defined thresholding
閾値の設定のことですが、、、どこにかかってくる閾値のことなのか分かりません。
5. Histogram equalization
「ヒストグラムの均一化」です。
コントラストが悪かったり、明るさが偏り、画像の明暗バランスが悪い場合、輝度成分(256階調)に対し、
均一化処理を行うことで、明るさのバランスを改善します。
6. Sobel edge detector (vertical/horizontal/combined)
「ソベル・エッジ検出処理」です。
ようは、エッジ(輪郭)を抜き出します。
ソベル・エッジは、境界線の位置、強度、方向を高精度で検出する特徴を持っています。
垂直方向(縦処理)、水平方向(横処理)、垂直+水平方向で処理を行い、エッジを見つけろということです。
※ソベル・エッジ検出は、アルゴリズム的に、ノイズを強調してしまう性質がある為、前処理としてノイズ除去(手順3)が必要となるわけです。
7. Calculate the gradient of the intensity and then threshold to binary image
2値化処理です。
黒(0)、白(1)の2階調画像に変換します。
つまり、6で求めたエッジ(輪郭)が白く浮き出ます。
8. Overlap the result of (7) on the original image
元のオリジナル画像と照らし合わせて確認、という意味でしょうか(?)
以上
ようは、エッジを抽出する手順だと思います。
(グレー画像にし、ノイズを取り去りきれいな画像(明暗の均一化)にしてからエッジを抽出)
画像処理を本格的に勉強しようとすれば、数学の知識が必須になります。
微分は勿論、様々な空間フィルタを扱わなければいけないので、大学の物理学課、数学課レベルの数学知識が必要になります。
とは言うものの、簡単な画像処理でしたら、既に正規化された手法があるので、誰にでも簡単に出来ると思います。
(今回の輪郭抽出のような手順を踏むのは、ある意味正規化された手法です。)
更に込み入った複雑な処理をしようと思えば、数学の知識が必要になり、自分なりの手法を身に付けなければいけません。
画像処理が得意な人というのは、画像を見ただけで、「これと、これと、この処理をした後にこのフィルタをかまして・・・」という風に、様々な処理の組立を行うことができます。
画像処理の入門に役立つサイトを貼り付けておきます。
(※上に書いた単語を検索するだけでも、画像処理に関する、かなりの知識が得られると思いますよ。)
http://www.gifu-nct.ac.jp/elec/yamada/iwata/index.html
http://www.microsoft.com/japan/msdn/academic/Articles/Algorithm/03/
お勧めの本です。(Windows,Macintosh,X-Window対応 C言語で学ぶ実践画像処理)
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-94619-3
画像処理というのはそれだけで本が何冊もかけてしまうくらいのボリュームがあるものです。
なので、ここで全部説明するわけには行きませんが、既に先人がホームページで
たくさん解説をしているのでそれらを利用しましょう。
ただ基本的なことは書いておきます。
1ー R(赤).G(緑).B(青).の部分的なイメージをオリジナル信号から区分ける。
オリジナルの画像はカラー画像でRGBに分解できるようなので、そのR,G,B値を取り出します。
2ー カラーイメージをグレーレベルのイメージに変換。
RGBから輝度に変換する式は有名で以下のようになります。
Y = 0.298912*R + 0.586611*G + 0.114478*B
これでモノクロの画像が出来ます。
3ー 平均フィルター及び中間フィルター 。
「画像処理 Mean filter」で検索してください。
*雑音除去関係
4 ーユーザーの設定によるスレシホルド。
「画像処理 threshold」で検索してください。
*ニ値化関係
5ー ヒストグラムのイコライゼイション(同等化)。
「画像処理 Histogram equalization」で検索してください。
*ヒストグラム平滑化関係
6ー プリウィットエッジの探知器(バーティカル/ホリゾンタル/コンビネーション)
「画像処理 Sobel edge」で検索してください。
*エッジ検出関係
7 ー輝度の勾配を計算して スレシホルド へ バイナリー画像。
この部分はあまりはっきりしませんが「画像処理 gradient intensity」などで検索。
おそらく鮮鋭化あるいは、合成できる画像への変換?
8ー(7)の結果とオリジナル信号を重ねる。
そのままですね、合成してみる事。
没有评论:
发表评论