PictureBox1にimage_1があります。この画像の中央にある長方形のセクションをスキャンしたいと思います。たとえば、x軸が300〜500、y軸が300〜450です。このセクションをスキャンするとき、すべてのピクセルの値を合計して、それらの平均値を取得したいと思います。
次に、テスト画像であるPictureBox2にimage_2があります。これは最初の画像のコピーですが、PictureBox2にはスクロールバーがあります。次に、最初の画像と同じ場所で2番目の画像をスキャンし、その長方形内のすべてのピクセル値を合計してそれらの平均を取得すると、値はimage_1で取得した値とまったく同じになります。
次に、PictureBox2のスクロールバーを使用してimage_2を垂直方向、y軸上に少し上に移動し、以前と同じ固定位置でスキャンをやり直し、ピクセル値を合計して平均を取得します。画像の別のセクションをスキャンしているため、これらの値は異なるはずです。次に、このプロセスをさらに繰り返し、image_2のy軸の違いの程度を変えて、値の読み取り値を取得します。
これは、概念のみを証明するためのものです。固定された長方形の位置で画像をスキャンし、値を合計して平均化するだけで、最終的に値を絞り込んで、オブジェクトの先頭を見つけることができます。
これが可能だと思われるかどうか、やってみたいと思います。最も簡単な方法を教えてください。この段階では、最速または最も効率的な方法を試す必要はありません。現時点では、純粋に最も単純な方法が最適です。
このように簡単にできることですか?
namespace imageAlign
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Bitmap myImage1 = (Bitmap)pictureBox1.Image;
OpenFileDialog ofd1 = new OpenFileDialog();
if (ofd1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(ofd1.FileName);
// get pixel value and store it in array, sum and average it so it can Be compared to image2
int sum = 0;
for (int i = 0; i > 300 && i < 500; i++)
{
for (int j = 0; j > 300 && j < 450; i++)
{
int[] img1 = new int[i];
sum += img1[i];
MessageBox.Show(sum);
//Color pixel = img1.GetPixel(i,j);
//sum and average pixel values in array
}
}
}
}
皆さん、ありがとうございました。