Нахождение пересечения линий - C#
Формулировка задачи:
Здравствуйте!
Дано изображение с белым фоном и черными пересекающимися линиями. Надо найти координаты пересечения линий. ( координаты линий не заданы)
Прошу хоть как-то что-то подсказать по решению этой задачи.
Решение задачи: «Нахождение пересечения линий»
textual
Листинг программы
namespace WindowsFormsTest {
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Windows.Forms;
using AForge.Imaging;
using AForge.Imaging.Filters;
public partial class Form1 : Form {
private Bitmap _image;
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
int h = 200;
_image = new Bitmap(h, h, PixelFormat.Format24bppRgb);
var r = new Random();
using (Graphics g = Graphics.FromImage(_image)) {
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.Clear(Color.Black);
var pen = new Pen(Color.White, 1.5f);
for (int i = 0; i < 10; i++) {
g.DrawLine(pen, r.Next(h), r.Next(h), r.Next(h), r.Next(h));
}
}
pictureBox1.Image = _image;
}
private void button2_Click(object sender, EventArgs e) {
Bitmap clone = _image.Clone(new Rectangle(0, 0, 200, 200), PixelFormat.Format8bppIndexed);
// Выделяем пересечения линий.
Bitmap vImage = new Erosion(new short[,]
{
{ 1, 0, 1 },
{ 0, 1, 0 },
{ 0, 1, 0 }
}).Apply(clone);
// Отбрасываем лишние срабатывания.
vImage = new Threshold().Apply(vImage);
// Строим прямоугольники вокруг найденный пересечений.
var blobCounter = new BlobCounter();
blobCounter.ProcessImage(vImage);
using (Graphics g = Graphics.FromImage(_image)) {
var pen = new Pen(Color.Red, 2.5f);
foreach (Blob blob in blobCounter.GetObjectsInformation()) {
g.DrawRectangle(pen, blob.Rectangle);
}
}
pictureBox1.Image = _image;
pictureBox2.Image = vImage;
}
}
}