■102728 / inTopicNo.3) |
Re[1]: このPythonをVBで書けるようでしたら |
□投稿者/ くま (15回)-(2023/12/16(Sat) 16:56:29)
|
焼いも様 問題点がいくつかあります。
1. 処理の内容から「画像処理」と考えられます。 Pythonからだと「OpenCV」を使う方法が有名かと思いますが その辺りの記載がありません。 (この場合「data」です) その辺はどうしたいのですか?
2. 「numpy」とは高度な算術をPython上で行えるようにしたパッケージです。 先の「OpenCV」と合わせて使うとなると2つの選択肢が発生します
A. Pythonの環境を作成しvb.net側から呼び出す ただし当然Pythonの環境等を学ばないといけない。
B. 処理を真似たラッパーまたはライブラリ 「OpenCV」->「OpenCvSharp」 「Numpy」->「Numpy.NET」 をインストールして使う。 ただし完全に互換があるわけではありませんので Pythonの資料を見ても再現できない場合がある。
3. それ以外だと自分で処理内容を理解して再現する方法 今回の場合画像ファイルにランダムで強度の違う[点]を追加するという処理になります。
そうすると「VB.net」では以下の作業で求める事ができます https://dobon.net/vb/dotnet/programing/random.html ※厳密にはPythonのランダムの場合、正規分布の標準偏差を利用しているので 値の発生度合いに差が発生します。
> noise = np.random.normal(0, 1, len(data)) Dim r As New System.Random() Dim noise As Double() = New Double(data.length) {} r.NextDouble(noise)
画像に点を描く方法 https://dobon.net/vb/dotnet/graphics/createimage.html SetPixelメソッドで点を描く ※今回のお題「ホワイトノイズ」と近い「カラーノイズ」の処理ですね。 「ホワイトノイズ」にしたいのであれば > Dim c As Color = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)) を Dim brightness as Byte = rnd.Next(256) Dim c As Color = Color.FromArgb(brightness, brightness, brightness) にすれば行えます。
どちらにしても 画像データは3次元配列で(2次元の場合もありますが)管理されていて それに対してOpenCVの場合画像処理的アプローチで変換を行い numpyの場合算術的なアプローチ(この場合、行列)により処理を行う その辺りの基本が分からないと使いこなせないと思います。
デバック等考えるとPython覚えたほうが早いです。
※あと.NET Frameworkなのか.NET Coreなのかバージョン等書かないと正確には答えられません 回答はとりあえず「.NET Framework」ベースとさせていただきました。
|
|