SSブログ

1次、2次元配列のマージソート方法 [VB]

マージソート

クイックソートよりかなり優れたソート方法です。元のデータの並び方が悪いと、クイックソートの効率はバブルソート並みに悪化します。マージソートはそのようなことが無いので効率よくソートを行うことのできるアルゴリズムです。

大まかな名がとしては以下の手順となります。

  1. 全体を2分割
  2. それぞれをさらに2分割
  3. 全てのブロックが1になるまで繰り返す
  4. 分割完了したら、隣同士のブロックを整列しながら併合
  5. さらに隣同士をマージ
  6. 全体が1つになるまで繰り返す

配列のソートアルゴリズムに関しては、いろいろな場所で紹介されている。ただし1次元配列の場合がほとんどで、2次元配列の場合のサンプルコードは見つけられなかった。

そこで1次および2次元配列のマージソートソフトを作成したので、ここに残しておく。

1次元配列のマージソート

image

2次元配列のマージソート

注意: 元となる2次元配列ar(x, y)のyの要素数はソートするデータ要素数に+1しておくこと

image

ソースコード


WrapAffine 密なアフィン変換概要 [OpenCV]

入力と種強くフォーアットは画像で、ワープ処理は、これらの画像hピクセルが隙間なく密に詰まっていることを仮定している。これは出力画像が滑らかかつ自然に見えるようにするための補間処理を行うこと。

◆画像処理効果

処理前

0

処理後

  • サイズ変更(0.7)

1 constant a0 s0.7

  • 角度変更(-45°) & ボーダーモード変更

BORDER_CONSTANT

2 constant a-45 s0.7

BORDER_REPLICATE

3 replicate a-45 s0.7

BORDER_REFLECT

4 reflect a-45 s0.7

BORDER_WRAP

5 wrap a-45 s0.7

以下に制作したWrapAffineクラスのソースを示す。

WrapAffine.h

h

WrapAffine.cpp

c

ソースコード

 

参考サイト


VBオブジェットのnull判定 [VB]

C/C++のつもりで以下のコードを書いたがコンパイルできない。

dim obj as ArrayList

If obj = Nothing Then

    Return

End If

いろいろ調べた結果、以下の書式で書くとOKとなることが判明。。。

If obj Is Nothing Then

    Return

End If

ちょっとしたことだけど、この程度の違いは言語側で吸収してほしいものだ。何かしら理由があるのでしょうけどね!


CSVファイルを読込みArrayListに保存する [VB]

ArrayListを利用することで、列数の定まっていないファイルの読み込みが可能となる。このソースコードでは列の区切りを “,”固定となっているが、Split(strLine, ",")を書き換えることでスペースやタブ区切りに変更することは容易である。 先に区切り文字を判別する方法もあるが、今回は対応しない。

関数呼び出し側とエラー処理

image

ReadCsvFile 関数

image

ソースコード


Dilate モルフォロジー膨張変換概要 [OpenCV]

膨張演算は連結成分(類似した色や輝度を持つピクセルからなる周囲から孤立した大きな領域)を見つける際に使われる。

◆画像処理効果

処理前

image

処理後(iterations=10)

image

以下に制作したDilateクラスのソースを示す。

Dilate.h

image

Dilate.cpp

image

ソースコード

 

参考サイト


Erode モルフォロジー収縮変換概要 [OpenCV]

収縮演算は多くの場合、画像内の「スペックル(斑点)」ノイズを削減するのにつかわれる。

◆画像処理効果

処理前

image

処理後(iterations=10)

image

以下に制作したErodeクラスのソースを示す。

Erode.h

image

Erode.cpp

image

ソースコード

 

参考サイト


Bilateral Filter バイラテラルフィルタ平滑化概要 [OpenCV]

エッジ保持平滑化という大きなクラスの画像解析用オペレータの一種である。エッジを平滑化しないで画像を平滑化することができる。しかし処理に時間がかかり以下の変換に10秒ちかくかかった。

◆画像処理効果

処理前

image

処理後

image

以下に制作したBilateralFilterクラスのソースを示す。

BilateralFilter.h

image

BilateralFilter.cpp

image

ソースコード

 

参考サイト


GaussianBlur ガウシアン平滑化概要 [OpenCV]

最高速ではないが、最も役に立つもの。入力配列内の各点をGaussianカーネルでコンボリューション(畳み込み)し、合計して出力配列を生成する。

◆画像処理効果

処理前

image

処理後

width方向に平滑化した場合(ksize=29, sigmaX=0)

image

height方向に平滑化した場合(ksize=29, sigmaY=0)

image

 

以下に制作したGaussianBlurクラスのソースを示す。

GaussianBlur.h

image

GaussianBlur.cpp

image

ソースコード

 

参考サイト


MedianBlur メディアン平滑化概要 [OpenCV]

出力画像のそれぞれのピクセルは、それを中心とする正方領域内のピクセルの中心値、または大きさの順に並べた時の真ん中の値(平均ではない)で置き換える。

メディアンフィルタは真ん中の点を選ぶことでアウトライアー(大きく孤立した異常値を持つ点)を無視することができる。

◆画像処理効果

処理前

image

処理後(aperture=21)

image

以下に制作したMedianBlurクラスのソースを示す。

MedianBlur.h

image

MedianBlur.cpp

image

ソースコード

 

参考サイト


Blur 単純平滑化概要 [OpenCV]

もっとも簡単なケースで、出力画像のそれぞれのピクセルは、入力画像の対応するピクセルを囲むフィルタウインドウ内の全ピクセルの平均。

◆画像処理効果

処理前

image

処理後

width方向に平滑化した場合(ksize=29)

image

height方向に平滑化した場合(ksize=29)

image

 

以下に制作したBlurクラスのソースを示す。

Blur.h

image

Blur.cpp

image

テキスト版へのリンク

 

参考サイト


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。