私はMatlabを使用して画像処理プロジェクトに取り組んでいます。プログラム(アプリケーションを意図したもの)を携帯電話で実行する必要があります。次に、コードをCまたはC++言語に変換して実行にかかる時間を感じ、プラットフォームを選択するように求められました。これまでのところ、この変換を行う方法を理解していませんでした。
最初に理解する必要があるのは、ある言語から別の言語(特に、MatlabやC++とは異なる言語)へのコードの移植は、通常、簡単で時間のかかることです。両方の言語をよく知っている必要があり、両方で同様の機能を利用できるようにする必要があります。 MatlabとC++の場合、Matlabは、ライブラリを使用しないとC++では利用できない多くの機能を提供します。したがって、最初に行うことは、C++で使用する必要があるライブラリを特定することです。 (一部のものは自分で書くこともできますが、自分でallと書くと、長い時間がかかります。)
画像処理を行っている場合は、ITKのようなものを調べることを強くお勧めします http://www.itk.org -私は画像処理ソフトウェアをC++で2回記述し、1回はITKなしで書きました(自分ですべてをコード化する)と、一度使用すると、ITKを使用したバージョンはより速く終了し、パフォーマンスが向上し、作業が10倍楽しくなりました。 FWIW。
MatlabはCコードを生成できます。
参照: http://www.mathworks.com/products/featured/embeddedmatlab/
ただし、生成されたコードは、MATLABライブラリに依存します。だから、おそらく携帯電話には使えません。しかし、とにかく時間を節約できるかもしれません。
また、 MATLAB Coder を使用して、数百行のMATLABで構成される一部の関数をCに変換しました。これには、MATLABの固有値ソルバーと行列反転関数を使用することが含まれます。
CoderはCコード(理論的には同一)を生成できましたが、非常に複雑で肥大化し、解読することができず、非常に非効率的であるように見えました。文字通り、必要な数の約10倍のコード行を作成しました。後でCコードを実際に理解し、さらに変更/更新できるように、すべて手動で変換することになりました。ただし、Matlabの配列のインデックスは1ベースで、Cでは0ベースであるため、このタスクは非常に退屈で危険な場合があります。私が経験したように、コードにバグを追加する可能性があります。また、ベクトル/行列演算をスカラーを処理するループに変換する必要があります(または、あるタイプのC行列代数パッケージを使用します)。
MathWorksは、「MATLAB®コードから読み取り可能で移植可能なCおよびC++コード」を生成すると主張する MATLAB Coder と呼ばれる製品を提供しています。私は自分で試したことがないので、これらの目標をどれだけうまく達成できるかについてはコメントできません。
Image Processing Toolbox に関して、 このリスト (おそらくR2016bの場合)は、コード生成に対して有効になっている関数と、それらの関数が持つ制限を示しています。
Matlabには、「Matlab Coder」と呼ばれるツールがあり、MATLABファイルをCコードまたはmexファイルに変換できます。私のコードは比較的単純なので、うまく機能します。スピードアップゲインは約10倍高速です。これにより、数百行をコーディングする時間を節約できます。参考になれば幸いです
リンクは、コードを変換するプロセスを3つの主要なステップで説明しています。
まず、現在のコードでいくつかの簡略化を行う必要があります。これにより、Coderが翻訳するのに十分なほど簡単になります。
次に、ツールを使用してmexファイルを生成し、すべてが実際に機能しているかどうかをテストします。
最後に、いくつかの設定を変更して、Cコードを生成します。私の場合、Cコードには、元のすべてのmatlabコード(約150行)をコメントとして含めて、約700行あります。私はそれはかなり読みやすく、改善できると思います。ただし、とにかく、私はすでにmexファイルから10倍の速度向上を得ています。これは間違いなく良いことです。
これがすべてのケースで機能するかどうかはわかりませんが、試す価値は間違いありません。
Mファイルをc(++)ファイルとしてエクスポートするツールがあることを覚えています。しかし、それを実行することはできませんでした。 c/c ++ codeにいくつかのあいまいなMATLABヘッダーを追加する必要があります...そして、それもお勧めできないと思います。
MATLABコードを実行している場合は、「手動」で変換するためにそれほど多くの労力を費やす必要はありません。私は、MATLABが使用されているいくつかのプロジェクトに取り組んでおり、コードをC/C++に変換するためにツールを使用することは考慮されていませんでした。常に「手作業」で行われていました。
ツールの使用について調査したのは私だけだったと思います。
まあmatlabからc/c ++への単純な変換はありません。言語とmatlabとc/c ++の違いを理解してから、c/c ++でコーディングを開始する必要があります。 動作するまで少しテストをコーディングします。