• ベストアンサー

直線検出のハフ変換について(deiphi)

こんにちわ。 ただいま直線検出のハフ変換をdelphiという言語で書いている者です。 ハフ変換もdelphiについてもまったくの初心者です。 C言語はそれなりに勉強してきました。 参考になるページを探しているのですが、なかなか分かりやすいページがなく悪戦苦闘しています。 どなたかこれに関するページや情報をご存じではないでしょうか? ご存じの方、提供お願い致します。 よろしくお願い致します。

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

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.1

古い本(1992)なので入手困難ですが アルゴリズム選集I グラフィックス編 安居院猛監修 でハフ変換を13ページにわたって解説しています。 TurboPascalのサンプルもありますのでDelphiへの移植なら楽だと思います。 古書店や図書館などでチェックしてみてはいかがでしょうか。

tweety36
質問者

お礼

回答ありがとうございます。 早速探してみたいと思います。

その他の回答 (1)

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.2

Pascal のサンプルはありませんが,↓この辺はもう見ましたか? Hough変換による画像からの直線や円の検出 (CodeZine) [初級] Hough変換を応用した交通標識の認識 (Java サンプル付) http://codezine.jp/a/article.aspx?aid=153 ハフ変換 (Wikipedia) http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%95%E5%A4%89%E6%8F%9B Hough変換の概要 http://www.koshi-lab.sist.chukyo-u.ac.jp/research/hough/outline.html "Hough変換" で検索 http://www.google.co.jp/search?hl=ja&q=%22Hough%E5%A4%89%E6%8F%9B%22&btnG=Google+%E6%A4%9C%E7%B4%A2&lr= "ハフ変換" で検索 http://www.google.co.jp/search?hl=ja&q=%22%E3%83%8F%E3%83%95%E5%A4%89%E6%8F%9B%22&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=

tweety36
質問者

お礼

はい。これらのページは見ました。 しかしながら回答ありがとうございました。

関連するQ&A

  • ハフ変換(円の検出)について

    ハフ変換を用いて2値画像中の円を検出するプログラムを作りたいのです。直線の検出は ρ=xcosθ+ysinθ でxy平面の点をρθ平面に反映しましたが、円の場合はどういう代数方程式を用いればいいのでしょうか?

  • ハフ変換(Hough変換)の原理について

    現在、ハフ変換の原理について下記サイトなどを参考に調べていますが いまいち原理がよくわかりません。 そこで2つ質問があります。 http://www.allisone.co.jp/html/Notes/image/Hough/index.html 【質問1】  ハフ変換の原理は以下の認識であっていますでしょうか。 [直線を検出するハフ変換の原理] 10個のピクセルで構成される画像があり、各々のピクセルの座標を (x1, y1)、(x2, y2)、(x3, y3)・・・(x10, y10) とする場合。 また、画像上の直線の式は p = xcosθ + ysinθで表すことができるため、 様々なpとθの組み合わせの式を作成(例えば下記3つの式) (1) 2 = xcos10 + ysin10 (2) 4 = xcos20 + ysin20 (3) 6 = xcos30 + ysin30 (1)の式に10個のピクセルの各々の座標(x1, y1)、(x2, y2)・・・(x10, y10) を代入 → 2つのピクセルの座標が(1)式を満たす 同様に(2)の式に10個のピクセルの各々の座標を代入 → 8つのピクセルの座標が(2)式を満たす 同様に(3)の式に10個のピクセルの各々の座標を代入 → 3つのピクセルの座標が(3)式を満たす (2)式を満たすピクセルが多数存在するためこの画像には 4 = xcos20 + ysin20 で表す直線が存在する 【疑問2】 上記の認識でよい場合、もう1つ疑問があります。 直線の式 p = xcosθ + ysinθ において様々な(p, θ)の組み合わせの式を作成 することになると思うのですがその(p, θ)はどのように決めるのでしょうか。 考えうる限りすべての(p, θ)の組み合わせの式を作成するとものすごい量の 種類の式ができると思います。これをプログラムで行うとハフ変換はかなり 重い処理ということになるのでしょうか。

  • 直線検出のハフ変換プログラム(delphi)

    ただいまdelphiで直線検出のハフ変換のプログラムを書いているのですが、コンパイルし、実行しようとするとスタックオーバーフローになってしまいます。 おそらく2次元配列のcounterの部分だと思うのですが、どなたか回避の仕方お分かりになるでしょうか? ご存じの方いらっしゃいましたら教えて下さい。 下記にハフ変換の部分のコードを載せます。 他にも何か気付いた点ありましたらご指摘お願いいたします。 ○直線検出のハフ変換○ var i, j, k, n: Integer; rx, ry: Integer; clr: tcolor; R: longint; counter_max: Integer; THETA_RESOLUTION, RHO_RESOLUTION, LNUMBER_MAX: Integer; pai: Double; theta, rho: Integer; theta_max, rho_max, count: Integer; theta_cut, rho_cut: Integer; counter:array[0..1023,0..1999] of Integer; //直線検出のためのカウンタ sn:array[0..1023] of Double; //sin cs:array[0..1023] of Double; //cos begin THETA_RESOLUTION:=1024; //thetaの範囲は0から1023まで RHO_RESOLUTION:=2000; //rhoの範囲は-1000から999まで LNUMBER_MAX:=15; //検索する電線の数は15まで pai:=PI / THETA_RESOLUTION; //π÷THETA_RESOLUTION for i:=0 to 1023 do //sinとcosのテーブルを用意 begin sn[i]:=Sin(pai*i); cs[i]:=Cos(pai*i); end; //ハフ変換の実行// for rx:=0 to 639 do begin for ry:=0 to 479 do begin clr:=image1.Canvas.Pixels[rx,ry]; R:=colortorgb(clr); if(getrvalue(R)=0)and(getgvalue(R)=0)and(getbvalue(R)=0) then //黒である for theta:=0 to 1023 do begin rho:=Trunc(rx*cs[theta]+ry*sn[theta]+0.5); counter[theta,rho+1000]:=counter[theta,rho+1000]+1; end; end; end; //ハフ逆変換の実行// for n:=0 to 14 do begin //counterが最大になるtheta_maxとrho_maxを求める// counter_max:=0; for theta:=0 to 1023 do begin for rho:=-RHO_RESOLUTION div 2 to RHO_RESOLUTION div 2-1 do begin if(counter[theta,rho+RHO_RESOLUTION div 2] > counter_max) then begin counter_max:=counter[theta,rho+RHO_RESOLUTION div 2]; theta_max:=theta; rho_max:=rho; count:=counter_max; end; end; end; //counter[theta_max,rho_max]の近傍を0にする// for i:=-20 to 20 do begin for j:=-10 to 10 do begin theta_cut:=theta_max+i; rho_cut:=rho_max+j; if(theta_cut < 0) then begin theta_cut:=theta_cut+THETA_RESOLUTION; rho_cut:=-rho_cut; end else if(theta_cut > THETA_RESOLUTION-1) then begin theta_cut:=theta_cut-THETA_RESOLUTION; rho_cut:=-rho_cut; end; counter[theta_cut,rho_cut+RHO_RESOLUTION div 2]:=0; //削除する end; end; //ハフ逆変換した結果の表示// if(theta_max<>0) then //垂線の線を描く begin for rx:=0 to 639 do begin ry:=Trunc((rho_max-rx*cs[theta_max])/sn[theta_max]+0.5); if(ry>=480)or(ry<0) then continue; image1.Canvas.Pixels[rx,ry]:=RGB(255,0,0); end; end; if(theta_max<>THETA_RESOLUTION div 2) then //水平の線を描く begin for ry:=0 to 479 do begin rx:=Trunc((rho_max-ry*sn[theta_max])/cs[theta_max]+0.5); if(rx>=640)or(rx<0) then continue; image1.Canvas.Pixels[rx,ry]:=RGB(255,0,0); end; end; //直線を形成するピクセルが60個未満になったら表示しない// if count<60 then break; end; end;

  • 画像情報処理についてです。(Hough変換です。)

    お忙しいところ申し訳ありません。大学の工学部の学生の者です。 大学の「画像情報処理」の講義で次のような課題が出題されました。 1.「画像内に平行な2直線が存在する。その2直線の中心に位置する直線を検出するアルゴリズムを考案せよ」 2.「画像内に中心の位置を同じくする幾つかの円と、それらの円と中心位置が異なる円が存在する(それらは交わっていない)。この時、中心の位置を同じくする幾つかの円の中心位置のみを検出するアルゴリズムを考案せよ(即ち、同心円でない円の中心は検出しない)。」 Hough変換を用いればいいというのは何となく分かるのですが、具体的なアルゴリズムが分かりません。 教えて頂けると幸いです。

  • どの環境・言語を選択すべきでしょうか?【画像処理・ハフ変換】

    工学系(化学)の大学生です。 開発環境・言語の選択に関してアドバイスを頂きたいと思い質問を投稿させて頂きます。 この度卒業研究を進めるに当たって多量の画像処理を行う事になりました。一枚一枚の処理は単純なのですが全体ではとても手でこなせる量ではなくコンピューター上で自動的に行いたいと考えています。 以下に参考になりそうな事柄を挙げました。こちらを基に、今後どのような開発環境・言語を選択して開発を行っていけばいいかアドバイスをいただければと思います。必要事項等ありましたら随時補足させて頂きます。 それでは、どうぞよろしくお願いいたします。 【処理内容】 ・画像から複数の円の半径を抽出*数百枚 ・得られたデータを統計的に処理、グラフ出力まで (現時点ではハフ変換の考え方をベースにしたプログラムを組もうと考えています。) 【開発に当たっての条件・希望】 ・実際に処理を行うに当たってプログラムを回すのはは自分のPCでなく大学の情報処理インフラを使おうと考えているので処理速度等の優先順位は低い ・自分以外の人間が今後アップデートを行う可能性がありできるだけ広く認知されている開発環境と言語を使いたい ・できれば無料で… 【スキルなど】 ・企業の研修のようなもので4つほど簡単なアプリケーションを作成しました(一ヶ月、Borland Delphi) ・授業の一部分でいくつかの極めて簡単なプログラムを組みました(c言語) 上二つで得た知識はほとんど残っていません。プログラミングの雰囲気はなんとなくわかる初心者、位に思っていただければと思います。

  • お薦めの初心者用ページメーカーガイドブック

    使い始めたページメーカーで日々悪戦苦闘しています。本屋さんに行っても上級者用の参考書しか置いてません。すみませんが、どなたか初心者にも理解できるお薦めのガイドブックをご存じでしたら教えて下さい。よろしくお願いします。

  • 知恵を貸していただけると助かります。

    今、MFCのダイアログベースを使って楽器のチューナーを作ろうとしてるんですが、どうしてもうまくいきません。。。orz サンプルソースを探して参考にしようとも考えましたが、なかなか見つからず悪戦苦闘を強いられている次第です。 そこで、サンプルソースを提供していただきたいと考えています。不躾なお願いだとは思いますが、よろしく願います。m(_ _)m

  • Shift-JISからUTF-8への変換が出来ません

    初歩的な質問で申し訳ありませんが、大変困っております。ただいまimagettftext()を使って日本語主力したく悪戦苦闘しております。  ページ自体はShift-JISで制作していますのでimagettftext()で日本語を出力する場合はUTF-8へ変換して出力するところまでは知れべていて分かりました。しかしいざmb_convert_encoding()で変換しようとするとなぜかUTF-8へ変換されません。 $str = mb_convert_encoding($str,"UTF-8","SJIS"); print mb_detect_encoding($str);  結果→SJIS しかしこれがEUC-JPなら変換されます。 $str = mb_convert_encoding($str,"EUC-JP","SJIS"); print mb_detect_encoding($str);  結果→EUC-JP なぜなのか原因が分からなく困っております。 どなたかご教授願いませんでしょうか? よろしくお願い致します。

    • 締切済み
    • PHP
  • HTML

    私はただ今、HTMLを使って悪戦苦闘しながらホームページを作成しているものですが、どうしてもカウンターの作り方がわかりません。おねがいです。教えてください! ちなみに、私はコンピューターの知識は全然無いので、なるべくわかりやすくお願いします。←贅沢なお願い・・。

    • ベストアンサー
    • HTML
  • オーダーフォームの文字化け

    ただいまHPの製作をしておりまして、オーダーフォームを作っています。 大まかな形は出来たのですが、テスト送信をしますと文字化けしてしまいます。 また、メール送信後「メールが送られました」と言うページにジャンプさせたいのですが、 それはどうしたら出来るのでしょうか? とても初歩的な質問で申し訳ありませんが、悪戦苦闘していますので どなたかご存知の方がいらっしゃいましたら、助けてください。 宜しくお願いいたします。

    • ベストアンサー
    • HTML

専門家に質問してみよう