• ベストアンサー

プログラミングの習得方法

画像処理アルゴリズムを考える仕事をしていますが、プログラミングスキルが足りておらず、思うように試行・検討が進められていないと痛感しております。 プログラミングをどのように身につけていけばよいでしょうか? 使用言語はC++で開発環境はVisual C++.net 2003を使っています。 プログラミングや画像処理の開発・研究に関わっている方のご意見がいただけるとありがたいです。 また、お薦めのWebサイトや本を紹介していただけるのも歓迎です。

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

  • ベストアンサー
  • axsies
  • ベストアンサー率64% (38/59)
回答No.3

補足ありがとうございます。 画像処理やOpenCVについて役立つアドバイスは差し上げられませんが、CG系は多少心得があり、通ずる所もあると思いますので、私なりにアドバイスさせて頂きます。 >しかしいざコーディングとなると、どう組んでいいのか迷ったり想定したように動作しなくて時間ばかりかかってしまい困っています。 プログラミングやアルゴリズムの知識や技術は、どうしても読み書き両方の量をこなす事が必要です。 プログラミングの学習において、私が一番重要だと考えているのは、トライ&エラーをいかに素早く繰り返すかです。 デバッグやテストのためのツールはどの程度扱えていますか? 先ずこうしたツール群や手法を使いこなせるようになるのが一番即効性があるかもしれません。 特に画像処理は、デバッガで数字だけ見ても実際の出力は想像できませんし、かといって最終出力だけではコードフローは解りませんので、多角度的に見れるようになることはかなり重要だと思います。 VisualStudoはかなり高機能なデバッガがありますが、デバッガは実行を止めた時の一面性しか見せてくれません。 古典的なprintfデバッグや、アサーションも未だ重要な手法の一つです。 こうした手法のためのツールとして、VisualC++ではcrtdbg.hで色々なマクロや関数を用意しています。 http://msdn.microsoft.com/ja-jp/library/1666sb98%28v=vs.80%29.aspx printfの代わりとして、_RPTマクロが使えます。(デバッガの出力ウィンドウに出力されます。) OpenCVでも独自にこうしたマクロ群が用意されているようです。 実験的なコードを素早く書くには、テスト画像の読み込みや、出力を面倒見てくれる、スケルトンの存在が欠かせません。 社内でこれらのようなツールが用意されているかもしれません。 ソフトウェア開発手法の参考書として、次の2冊を紹介させて頂きます。 プログラミング作法 http://www.amazon.co.jp/dp/4756136494 コードコンプリート上・下 http://www.amazon.co.jp/dp/489100455X http://www.amazon.co.jp/dp/4891004568 もう一つ、コードの写経も意外に有効です。 これは私の経験則ですが、最初は丁寧に理屈を理解するよりも、動くコードのパターンを蓄積した方が結果的に学習が早かったりします。 数式や言葉だと全く意味不明でも、コード書いて動かしてみると、なんだこんな簡単なことを言っていただけだったのか、という経験が多々あります。 サンプルコードが多めの画像処理本を1冊探してみるといいかもしれません。 数学については、スネークやオプティカルフローをスクラッチから実装できる技術が必要とされるのであれば、やはり苦手とは言ってられないと思いますが、ひとまずOpenCVへ渡すためのパラメータを作ったり、意味を理解するところで躓いてないのでしたらそれほど気にする必要はないかもしれません。 もしやり直すのであれば、「プログラマのための線形代数」という本はオススメです。 http://www.amazon.co.jp/dp/4274065782 最後に、本の読み方についてですが、1冊をまるまる全て理解するには誰でも相当な時間がかかります。 内容や目的にもよりますが、斜め読みでも構わないので、沢山目を通すのも一つの方法です。 中身は完全に頭に入って無くても、実際に問題に遭遇したとき、「そういえばあの本で似たような話があったような…」みたいな索引として働きます。 以上、長くなりましたが一つでも参考になれば幸いです。

Kumakko3
質問者

お礼

丁寧なアドバイスをいただけたことに感激しております。ありがとうございます! 私の足りない部分に対して的確に意見を示していただいていると感じます。 下記ご指摘のことは、今まさに私に必要なことだと思います。実際にどこで間違えたかを把握するのに苦労しており、なかなか前に進めていないと感じております。恥ずかしながら、Visual Studioのデバッガもブレークポイントの使用とステップ実行くらいしか使えておりません。その他のVisual StudioやOpen CVのデバッグやテストーツールについて知っておりませんでした。 >プログラミングの学習において、私が一番重要だと考えているのは、トライ&エラーをいかに素早く繰り返すかです。 >特に画像処理は、デバッガで数字だけ見ても実際の出力は想像できませんし、かといって最終出力だけではコードフローは解りませんので、多角度的に見れるようになることはかなり重要だと思います。 教えていただいた良書にも目を通してみたいと思います。 アドバイスしていただいたことをもとに書くこと・読むことを強化し、もっとスピードアップできるようになりたいです。

その他の回答 (2)

  • axsies
  • ベストアンサー率64% (38/59)
回答No.2

初めに、画像処理に関わっている者ではありませんがご容赦ください。 一口にプログラミングスキルが足りないと言っても、言語そのもので躓いてるのか、画像処理技術の知識が足りないと感じているのか、実装技術なのか、等でアドバイスは変わってきます。 もう少し具体的に、 ・どのような職種(医療系?映像メディア系?組み込み系?) ・実務はどんな環境なのか(OpenCVのようなライブラリを使ったコーディングがメイン?、スクラッチから組まなければならない?) ・現在のスキルの程(大学で専攻していた?全くの門外漢?C++なら出来る?) のような情報がないと適切なアドバイスを受けるのは難しいと思います。 画像処理技術を俯瞰するなら、CG-ARTS協会が出している、CG検定の公式テキストが一番良いと思います。 ディジタル画像処理 http://www.amazon.co.jp/dp/4903474011/ 一つ一つの内容は薄いので、もっと詳細が知りたい場合は検索したり、論文を漁ります。 図書館でチラ見した程度で、内容はあんまり覚えてないのですが 詳解 画像処理プログラミング C言語で実装する画像処理アルゴリズムのすべて http://www.amazon.co.jp/dp/4797344377 という本もあります。 後は数学、ですね。。。 画像処理(CGでもそうですが)やる上で、微分方程式と線形代数については大なり小なり、避けられない面があると思います。 もう一つの壁は、アーキテクチャや最適化の知識でしょうか。 これも、大規模なデータ処理という点から避けては通れないと思いますが、質問文からはアドバイス出来かねます。

Kumakko3
質問者

補足

丁寧なご回答・ご指摘ありがとうございます。 説明が不足していたところがありすみません。ご指摘いただいた点について補足させていただきます。 ・職種は医療系となります。 ・OpenCV使っています。画像の読み込み・書き出し、ライブラリの機能もある程度使っています。 しかし、開発においてそのまま適用して終わりというわけにはいかないので、画素値をunsigned charなどの配列に格納しなおして、自分で各処理についてコーディングできるくらい理解して、試行・改良していく必要があります。 ・情報工学を大学で学んでおり、Cの基本は知っております。 しかしいざコーディングとなると、どう組んでいいのか迷ったり想定したように動作しなくて時間ばかりかかってしまい困っています。 ご紹介いただいたCG-ARTSの「ディジタル画像処理」の本は持っております。私も画像処理技術の概要は把握を把握するのに良いテキストだと思います。 しかし、いざ実装となるとスネーク(動的輪郭)などの領域抽出、オプティカルフローなどの画像間マッチング、などいろいろつまづいてしまい困っています。 アルゴリズムを考えるには、やはり数学力が不足しているのでしょうか・・・ 昔からどうも数学は苦手でして、論文などに微分方程式や行列計算が入ってきたときにその部分の意図していることがイメージできなかったり、画像情報に対してどのように適用されるのかがわからなかったりします。 大規模データ処理の高速化のためのアーキテクチャや最適化については、現在のところ私のほうで考えなくてもよい状態です。 さらにアドバイスをいただけると幸いです。

  • im_not_ok
  • ベストアンサー率25% (3/12)
回答No.1

画像処理アルゴリズムということなので、とりあえず OpenCV 関連を2冊。 詳解 OpenCV —コンピュータビジョンライブラリを使った画像処理・認識 http://www.amazon.co.jp/exec/obidos/ASIN/4873114136/64-46546-22/ OpenCV 2 プログラミングブック OpenCV 2.2/2.3対応 http://www.amazon.co.jp/exec/obidos/ASIN/4839941262/64-46546-22/ C++ は Standard で、以下2冊。 ストラウストラップのプログラミング入門 http://www.amazon.co.jp/exec/obidos/ASIN/4798119598/64-46546-22/ Accelerated C++—効率的なプログラミングのための新しい定跡 http://www.amazon.co.jp/exec/obidos/ASIN/4894714221/64-46546-22/ Visual C++ だと、以下の1冊とかで、どうでしょか? 速効解決!逆引きハンドブックVisual C++ http://www.amazon.co.jp/exec/obidos/ASIN/488337534X/64-46546-22/

Kumakko3
質問者

お礼

書籍のご紹介ありがとうございます。 C++ Standardについての本は、かなりボリュームがありそうですね。やはりこのくらいの本を読みこなすと実力がアップするのでしょうか。 本屋で書籍を見てみようと思います。仕事があるので頭から全て読んでいく時間をとることはできそうにありません。どのようなスタイルで読んでいくのがよいかアドバイスをいただけるとさらに助かります。

関連するQ&A

  • プログラミングの学習法

    いままでいろんな言語を使って、浅いプログラミングをしていました。 しかし、技術の低さを痛感したのでC/C++言語に絞って学習することにしました。 今までやってきた基本的なことは以下のものです。 ・C/C++言語の学習 ・アルゴリズムの学習 ・VC++によるウィンドウズプログラミングの学習 ここから更に基本的な技術力を伸ばすには、どんなことに取り組めばよいですか?

  • プログラミング言語を習得する上での具体的な課題

    こんにちは。 現在大学生4年生で新しいプログラミング言語の習得を目指しております。その理由といたしましては諸事情により大学院では今とは違う研究分野の研究室に配属が決まったからです。 その分野とは、ウェブ工学やデータベース関係を扱う研究室です。大学院の指導教授とお話したところ「CとC++は必須、あとはRubyかPerlのどちらかを習得しておくこと、Javaは必須ではない」と言われました。 早速、スキルアップのため言語の勉強をしようと思っているのですが、言語を習得するためにはなにか目標を持ちながら参考書を読むのがいいといろいろなサイトなどで書いてありました。 これから言語を勉強していくので自分にあった具体的な課題がまだ分かりません。そこでなのですが、こういったものを作っていけばいいのではないかという具体的な課題を教えていただけないでしょうか。できれば、初歩的なものから段階的に難しいものを教えていただけるとうれしいです。 よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • 研究のためのプログラミングスキル

    自分は今大学で、電気電子を専行しています。 先日教授から、4年生になって研究室に配属されたときに、プログラミングスキルが必要だと言われました。 授業ではほとんどプログラミングについて学ぶ機会がないため独学でスキルをみにつけなければなりません。 おそらく、電気電子に関する実験をした際に、そのときのデータの処理を行えるプログラムを書けるようになっておけということだと思います。 しかし、プログラミングといっても種類が豊富にあり、どれを学んでおくとよいのか分かりません。 現在は一応C言語を独学中です。 電気系の研究室に配属された際に、プログラミングのことで困らなくて済むようにするには、どの言語を学んでおけばよいでしょうか? アドバイス宜しくお願いします。

  • プログラミング言語の習得について  

    最近 プログラミングについて興味を持ち始め、本などを読んで勉強している駆け出しの新米です。。。 実は、ニコ動などの科学のコーナーなどで、興味を持ったのですが、 本に書いてあることをどうやって活かせば、自分の作りたいプログラムを作れるのか教えていただきたいです。 あと、VISUAL C++はプログラム作りに関して言えば 使いやすいですか? もしかして、ほかにいいのがあったら 教えてください。 また、今はC言語をやっているのですが、あんまり始めるのには良くない言語ということを聞いたのですが、変えたほうがいいのですか? 頑張るので いろいろコメントくださいね。                 よろしくお願いします。

  • プログラミングの仕方

    とても初歩的な質問で申し訳ありません。C言語の参考書の様なものをもらいましたが、Cを始めプログラミングの言語はどこでどのようにして記述するものなのでしょう。ウィンドウズでテキストで記述するレベルなら、基本情報処理の初歩レベルのアルゴリズムなら出来る様な気がします。プログラミングを動かすには、どの様なツールが必用なのでしょうか。

  • おすすめのプログラミング言語を教えてください

    35歳SEです。 しかしSEとは名ばかりで、実際にシステムを1から設計したことも無く、 プログラミングについてもほとんどできません。 まともに扱えるのが、 ・SQL(PL/SQL含む) ・C言語 くらいです。 もはやプログラマという年齢ではないのですが、 趣味や自己研鑽の一環として、何かプログラミング言語を身に着けたいと考えています。 この状況下で何かオススメのプログラミング言語はありますでしょうか。 ちなみに仕事はネットワーク系Web系システム開発なので、 それに活かせるとより良いです。 どうぞご教示のほど、よろしくお願いいたします。

  • 初級者のプログラミング用コンピューター

    初めまして、 プログラミングの仕事をしていまして、それに適する新しいコンピューターを買います。 プログラミングは、 Cや、 C++, Java言語を使います。 特に、Java言語ではJDK, サクラエディタと使っています。 C、C++言語はMicrosoft Visual C++ 2010 Expressを使っています。 将来的には、Androidアプリの開発をする環境をする予定です。 これらの条件で適したコンピューターを教えていただけますか? よろしく御願いします。

  • プログラミング言語の違いを教えてください!

    こんにちわ。 ただ今就職活動中の者です。 大学ではC++の基礎を勉強しましたが色々あるプログラミング言語の違いがよく理解できていません。 プログラミング言語はCOBOL、JAVA、C言語、visual basic、perlなど、本当に様々な言語がありますが、それらの言語について詳しく教えていただけませんでしょうか? (それぞれはどういった分野のシステムの開発に向いていて、どのような弱点があるなど)お手数ですが、よろしくお願いします!

  • クオンツに必要なプログラミングの知識はなんですか?

    クオンツかアクチュアリーを目指している中堅私立大学2年生(経済学部)です。金融系の企業の採用情報を見る限り、クオンツにしろアクチュアリーにしろ、 ・英語力 ・プログラミングスキル ・数理的処理能力 の3つが必須条件でしかも学歴フィルターに引っかかるため、プログラミングスキルと数理的処理能力をあとの3年間(大学院に行くため)で極めようと考えています。もちろん英語力もつけますが(笑) 英語と数理ファイナンスは友人や先輩で大学院生がいるため、いろいろ情報を仕入れることができるのですがプログラミングについて全く情報が入ってこない環境です。 最初は王道のC++かJavaに手をつけようと思ったのですが、RubyやPerl,Python,R言語などいろいろあって何から手をつければよいのか分からなくなってしまいました。 でも、とりあえずC++かJavaかのどちらか1つに絞って勉強したいと考えています。 補足で、かつてBasic言語なのですが、Visual BasicとActive Basicをやっていました。いまでもWindowsプリインストールのメモ帳ぐらいなら作れます(RADなしで)。大学の教養にもプログラミングはないので、完全独学になります。 ここで、質問なのですが (1)クオンツに限らずC++とJavaなら、どちらを習得すればよいですか。 (2)おすすめの書籍を教えてください。 (3)C++とJavaに限らずこれは使いこなせたほうがよい開発言語があったら教えてください。 猥雑な文章ですが、回答をお待ちしております

  • プログラミングを初めたいのですが・・・

    パソコンに興味をもち、プログラミングをはじめようとしている者です。 C#での開発をしたいと思っています。Visual StudioC#もダウンロードしたのですが、何から手をつけてよいのかが分かりません。 とりあえずMSDNにあった「はじめてのプログラミング」などをやってみましたが、その先どういけばよいのかがわかりません。 みなさんのように上達するにはどのような方法で学べばよいのか、本当に教えてください。 MSDNに一般向けに書いてあることなども、言葉自体が難しく、わかりません。 HTMLやJavaScriptはいくらか習得していますが、C言語はやはりハードルが高いですね・・・。 どうかよろしくお願いします。

専門家に質問してみよう