ISP_Image Signal Processor とは

ISP ってなんだっけーとよくなる。

画像処理プロセッサ直訳すると画像信号処理
デジタルカメラなどに組み込まれている重要な部品。

イメージセンサ ( CCD ) は光の強弱電気信号変える
この電気信号から画像データ作るのが ISP
ISP は特定の半導体部品になっているのが普通。カメラを分解しないと見ることができないが、
一般の人が見てもどれが ISP かは分からない。

 

--別サイト説明--

デジタルカメラなどは、
イメージセンサ ( CCD/CMOS ) から出力される生データ ( RAW データ ) に対して
画像処理 ( Image Signal Processing ) が行われる

ISP は、
レンズなどの光学系の補正処理や、
イメージセンサーのばらつきなどから生じる傷補正など、
画素単位での処理が中心。

 

画像処理は用途によって異なる

DVD レコーダー / プレーヤ では
MPEG-2 などの動画像符号化 / 複合化処理 ( ビデオコーデック ) が用いられる。

ビデオコーデックでは、 16 * 16 画素ブロック ( マクロブロック ) を中心とした
ブロック単位で、動きベクトルの探索や DCT ( 離散コサイン変換 )量子化などの
処理が行われる。

デジタルカメラやカメラ付携帯などでは、生データに対して
ISP ( Image Signal Processing  ) と呼ばれる画像処理が行われる。
上記で説明済み。

車載機器で用いられる歩行者認識や、顔認識などの画像処理では
画像データの特徴量を抽出し、参照データと比較することのにより
ある種の判断を下すという流れも多い。

 

 

こちらから。
https://www.thine.co.jp/products/pr_details/Image-Signal-Processor.html?SmartPhonePCView=2
https://www.nttpc.co.jp/yougo/%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5.html

http://118.159.234.32/design_support/elearning/keytechnology/__icsFiles/afieldfile
/2010/01/06/edn201001_39_47p.pdf

↑の pdf サイトは詳しく書いてあるがが自分の理解が追いつかない。

以上。

コマンドライン引数とは

プログラム起動際に渡されるパラメータの値
Main 関数の引数としてプログラムに渡される。
コマンドライン引数は、 CUI アプリケーションだけでなく
GUI アプリケーションでも利用することができる。

ex )
・SMPL.XE を作成。
コマンドラインから以下のコマンドを入力。
  C:\>SMPL ABC DEF GHI

    int main(int argc,char *argv[ ])
    {
        int i;
       
        printf("引数の総個数 = %d\n", argc); // 4
        for (i = 0; i < argc; i++) {
            printf("%d番目の引数 = %s\n", i, argv[i]); // ex ) 2 番目~ = DEF
        }
        return 0;
    }

 

--Memo--
終了コード:
プログラムが正しく終了したかどうかなどの情報を得るために、
プログラム終了時に返す値のこと。
正常終了したときに 0 を返し、
それ以外のときには 0 以外の値 ( エラーの原因に応じて値を変える ) を返すようにする。

 

 

こちらから。
https://ufcpp.net/study/csharp/st_command.html
http://www9.plala.or.jp/sgwr-t/c/sec11-4.html
https://dobon.net/vb/dotnet/programing/commandline.html

以上。

C#_フォルダを指定してファイル名を取得

Directory.GetFiles とか覚えられん。

 ※ デザインから folderBrowserDialog 設置済み

    if (folderBrowserDialog.ShowDialog() != DialogResult.OK)
    {
        return;
    }
   
    string folderPath = folderBrowserDialog.SelectedPath;
    string[ ] getFiles = Directory.GetFiles(
        folderPath, "*", SearchOption.TopDirectoryOnly); //絶対パス取得

    string[ ] fileNamesOnly = new string[ getFiles.Count( ) ];    
    for (inti = 0; i < getFiles.Count(); i++)
    {
        fileNamesOnly[i] = Path.GetFileNameWithoutExtension(getFiles[i]);
    }

 

 

以上。

C++ C++/CLI の配列の書き方

分からなくなる。

 

C++

    int p[ 10 ];
    int p[ ] = { 1, 2, 3 }; // 初期化
    or
    int* p = new int[ foo ]; // 要素数を変数とする場合。int foo = 5;

 

C++/CLI

    // unmanaged
    int* p = new int[10];
    int p[ ] = { 1, 2, 3 }; // 初期化
   
    // managed
    array< int >^ p = gcnew array< int >( 10 );
   
    // 初期化
    array<int>^ p = gcnew array< int > { 1, 2, 3 };
    array<int>^ p = { 1, 2, 3 }; // 代替の構文

 

C#

    int[ ] p = new int[ 10 ];
   
    //初期化
    int[ ] p = new int[ ] { 1, 2, 3 };
    int[ ] p = { 1, 2, 3 };  //代替の構文

 

 

こちらから。
https://so-zou.jp/software/tech/programming/language-comparison/grammar/type/pointer/array/

以上。

コンテキストとは

C# での実行コンテキスト調べたかったが重い。そしてよく分からない。

文脈・前後関係・状況。
利用者の意図や状況、環境などの総体を表したり、
同じ処理記述でも状況に応じて動作などが異なる場合に、
その選択基準となる条件などを指す場合が多い。
ex )
マウスの右クリックで現れるクリックのメニューで、
画像の上と文字の上でのクリックでメニューの内容が異なる
コンテキストメニューという。

 

プログラミングにおけるコンテキスト

同じコードプログラムの要素が、
その置かれているプログラム内での位置や、実行される際の内部状態などによって
異なる振る舞いをしたり、異なる制約を受けたりすることを指す

また、
画面描画・グラフィックス処理、入出力機器の制御などで、
入出力先の装置を抽象化し、プログラム上で扱えるデータ構造の集合など
形に表したものをコンテキストということがある。
( デバイスコンテキスト・グラフィックスコンテキスト・レンダリングコンテキスト等という )
データ構造:データの集まりを扱いやすいように、一定の形式で格納したもの。

 

--ちょっとすぐに意味分からなかったので文メモ--
入出力先の装置を抽象化したものをプログラム上で扱う為に、
データ構造の集合などの形にする。
この「入出力先の装置を抽象化した」データ構造の集合など、のことを
コンテキストという。 

 

OS の実行制御におけるコンテキスト

コンピュータの処理装置 ( CPU ) が現在実行している
処理の流れ ( プロセス、スレッド )一時停止し、
別のものに切り替えて実行を再開することコンテキストスイッチという。

一つのプロセッサ ( コア )複数の命令の流れを同時
実行状態に置くマルチタスク制御のために行われるもので、
ある命令の流れの実行を中断し、同じように中断していた別の流れの実行を
再開する処理を指す。
この切り替えを短い時間ごとに頻繁に行うことで、
あたかも人間には複数のプログラムが並列に実行されているように感じる。

 

実行の流れを切り替えるには、
単に切り替え先のプログラムで次に実行される命令を読み込んで
CPU に投入するのでは不完全で、
切り替え直前の CPU 内部の記憶装置 ( レジスタ ) の内容などを
メモリ上に移し替えて保全し、同じように保全されていた切り替え先の、
直前の実行状態を書き戻すといった処理が必要。

このような、
あるプログラムのある瞬間の実行状態の全体を指してコンテキストという。

プロセッサ:
CPU もしくは、実際にデータや命令を処理するハードウェアのこと。

レジスタ
CPU 内部にある、演算や実行状態の保持に用いる記憶素子。
演算などの処理を行うためのデータをメモリから読みだし・途中経過を保持、
メモリ上のアドレス ( 番地 ) などを指し示したりするためになどに用いられる。

 

 

 

こちらから。
https://it-words.jp/w/E382B3E383B3E38386E382ADE382B9E38388.html
http://e-words.jp/w/%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.html
https://ufcpp.wordpress.com/2014/02/21/%E5%AE%9F%E8%A1%8C%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88/
実行コンテキスト ( execution context: 実行の文脈 )。
文脈 → 意識することなく皆が共有している情報、という意味。

以上。

C++/CLI_ C# System::String^ を std:string に変換

msclr::interop::marshal_as<変換したい型> を使う。
マーシャリング:
システムやプログラミング言語の間でデータをやり取りできるようにするための処理。

    // #include <msclr/marshal_cppstd.h>
    System::String^ hoge = gcnew System::String("Hoge");
    std::string getStr = msclr::interop::marshal_as<std::string>(hoge);

逆の場合は型を変える。

 

marshal_as とは

ネイティブ環境マネージ環境間でデータ変換をする。
戻り値は指定した型での値。

マーシャリングライブラリは、複数のヘッダーファイルで構成される。

ex )
上記のコードでは、marshal_cppstd.h をインクルードしたが、
char* から System::String^ へ変換するなら、marshal.h をインクルードする。
関数は同じ marshal_as を使用。

どの変換でも 1 ファイルのインクルードが必要だが、他の変換で必要とされている
追加ファイルをインクルードすることもできる。

 

一部のデータ変換はコンテキストが必要

marshal_context を使用してデータ型を変換する。

マーシャリングにコンテキストが必要なのは、
マネージデータ型からネイティブデータ型にマーシャリングし、
変換先のネイティブ型に自動クリーンアップ用のデストラクターがない場合のみ。

マーシャリングコンテキストは、
デストラクターの中で割り当てられているネイティブデータ型を破棄する。
したがって、
コンテキストを必要とする変換は、コンテキストが削除されるまでのみ有効。
マーシャリングされた値を保存するには、独自の変数に値をコピーする必要がある。

 

 

こちらから。 
https://takachan.hatenablog.com/entry/2017/11/29/200234
https://msdn.microsoft.com/ja-jp/library/bb384859.aspx
https://msdn.microsoft.com/ja-jp/library/bb384865.aspx
https://dictionary.goo.ne.jp/jn/206616/meaning/m0u/

(↓他の方法)
https://support.microsoft.com/ja-jp/help/311259/how-to-convert-from-system-string-to-char-in-visual-c

以上。

C++/CLI_ C# のプロパティ機能を C++/CLI で使う

自作型をコンボボックスに表示したC# のコードを C++/CLI でも実現したい。メモ 03

--経緯--
Displaymember と Valuemember を使う方法は C++/CLI では使えない ?
getter setter のプロパティで書かないと使えないのか ?だが色々調べてたら property が出てきた。
最初から「 cli getter setter 」で検索かければよかった。

 

property を使う。

 

C++/CLI での書き方

    public:
        property int myKey_;    // トリビアルプロパティという
       
    // key を受け取る
    // ((MyKeyindex ^)comboBox1->SelectedItem)->myKey_

 

C# での書き方

    public int myKey_ { get; set; }

 

あとは C# で書いたようにすれば DisplaymemberValuemember が使える。
※ -> や ^ など変更する箇所あり。

 

property メモ

1.

C# の getter/setter を書くとコンパイラが裏でなんやかんや。
property も裏で get 及び set アクセサ・自動変数を自動で作成してくれる。

 

2.

アクセス指定 ( ただのコピペ )

ex ) セッターを private に指定しているので、
外部からの Value プロパティへ値の代入はできない

    public ref class SampleSlazz
    {
        private:
            _value;
       
        public:
            SampleClazz() : _value(0){}
           
            property int Value
            {
                int get() { return this->_value; }
           
            private:
                void set(int value){ this->_value = value;}
            }
            int _Value;
    };
   
    int main(stdcli::array<String^>^ args)
    {
        SampleClazz sample;
        // コンパイルエラー
        sample.Value = 7;
       
        // プロパティ外のアクセサ指定子は影響しないので、publicメンバ
        sample._Value = 10;
        Console::WriteLine("Value : {0}", sample.Value);
    }

 

3.

以下のように書いたら下記のエラーが出力されて実行されなかった。

warning C4717:すべてのコントロールのパス、関数を回帰すると
ランタイム スタック オーバーフローが発生します。

そりゃそうだ。自分自身を参照しているんだから。

 

    property int myKey_
    {
        int get( ){ return this->myKey_; }
        void set(int v){ this->myKey_ = v; }
    }

なお、property なしで ↑ のように書いたら構文エラー。メンバだから。

 

 

 復習

プロパティ:
JavaC++ にはない機能。
クラス外部から見るとメンバー変数のように振る舞い、
クラス内部から見るとメソッドのように振舞うもの。

 

 

 

こちらから。もしかして、インデクサなるものを使えばコンボボックスの紐づけ簡潔に実装できる ?
http://vene.wankuma.com/prog/CppCli_Property.aspx
https://msdn.microsoft.com/ja-jp/library/2f1ec0b1.aspx
https://ufcpp.net/study/csharp/oo_property.html

C++C# 的な実装
http://marycore.jp/prog/cpp/simple-property/
https://takachan.hatenablog.com/entry/2018/07/28/215502
https://qiita.com/HogeTatu/items/1bb3a394f88ba90cd37e
http://d.hatena.ne.jp/poyonon/20110828/1314487034

インデクサ
http://wisdom.sakura.ne.jp/programming/cs/cs40.html
https://so-zou.jp/software/tech/programming/language-comparison/class/property.htm

以上。