Я ищу программу, которая определяет границу образа, , например, у меня есть квадрат и программа обнаруживает X/Y-COORDSКак определить границу изображения программно?
Пример:
alt text http://img709.imageshack.us/img709/1341/22444641.png
Я ищу программу, которая определяет границу образа, , например, у меня есть квадрат и программа обнаруживает X/Y-COORDSКак определить границу изображения программно?
Пример:
alt text http://img709.imageshack.us/img709/1341/22444641.png
От звуки этого, вы просто хотите blob extraction algorithm. После этого самые низкие/самые высокие значения для x/y дадут вам координаты углов.
Да, но я думаю, вам нужно сначала применить детектор границы, чтобы отличать внутренние пиксели объекта от граничных пикселей объекта. – Andres
Судя по комментариям, сделанным после моего сообщения, похоже, что у него есть изображение, подобное выше, и требуется координаты углов некоторого заполненного многоугольника. Я предполагаю, что мой следующий вопрос будет, всегда ли он выпуклый? –
Это зависит от того, что вы хотите делать с границей, если вы ищете только значения краев области, используйте алгоритм, называемый Connected Components Region. Вы должны знать значение области до использования алгоритма. Это будет перемещаться по границе и собирать внешний регион. Если вы пытаетесь обнаружить только внешние линии, получите градиент изображения, и он покажет, где находятся линии. Для этого сверните изображение с фильтром обнаружения края, таким как Prewitt, Sobel и т. Д.
Вы можете использовать любую библиотеку обработки изображений, такую как Opencv. который находится в C++ или python. Вы должны искать функции обнаружения края, такие как обнаружение края канна. Конечно, для этого потребуется некоторое погружение в обработку изображений. Пример изображения, которое вы дали, должен быть прямым, чтобы определить, насколько шумными/разнообразными будут изображения?
Canny был бы излишним для такого изображения. Простая комбинация градиентных фильтров будет делать то, что ему нужно. – monksy
Все зависит от того, с какими условиями вы хотите справиться (как уже упоминалось - насколько шумно будет изображение) – elijah
Учитывая, что его образец, показанный в заголовке orignal, может быть чрезмерным – monksy
A shape recognition algorithm может помочь вам, если у него твердая граница, и цвет фона является сплошным.
Это очень простой детектор кромок. Он подходит для двоичных изображений. Он просто вычисляет различия между горизонтальными и вертикальными пикселями, такими как image.pos [1,1] = image.pos [1,1] - image.pos [1,2] и то же самое для вертикальных разностей. Имейте в виду, что вам также необходимо нормализовать его в диапазоне значений 0..255.
Но! если вам просто нужна программа, используйте Adobe Photoshop.
Код написан на C#.
public void SimpleEdgeDetection()
{
BitmapData data = Util.SetImageToProcess(image);
if (image.PixelFormat != PixelFormat.Format8bppIndexed)
return;
unsafe
{
byte* ptr1 = (byte *)data.Scan0;
byte* ptr2;
int offset = data.Stride - data.Width;
int height = data.Height - 1;
int px;
for (int y = 0; y < height; y++)
{
ptr2 = (byte*)ptr1 + data.Stride;
for (int x = 0; x < data.Width; x++, ptr1++, ptr2++)
{
px = Math.Abs(ptr1[0] - ptr1[1]) + Math.Abs(ptr1[0] - ptr2[0]);
if (px > Util.MaxGrayLevel) px = Util.MaxGrayLevel;
ptr1[0] = (byte)px;
}
ptr1 += offset;
}
}
image.UnlockBits(data);
}
Метод от Util класса
static public BitmapData SetImageToProcess(Bitmap image)
{
if (image != null)
return image.LockBits(
new Rectangle(0, 0, image.Width, image.Height),
ImageLockMode.ReadWrite,
image.PixelFormat);
return null;
}
Если вам нужно больше объяснений или алгоритм просто спросить больше информации, не будучи столь общим.
border! = Xy координаты. Пожалуйста, уточните свой вопрос. Кроме того, какие языки и платформы (ы) вы спрашиваете? – 2009-12-23 19:22:00
Это больше похоже на SVG, он хочет иметь внешние координаты/границы графического элемента; ! [Alt text] [1] [1]: http://img31.imageshack.us/img31/5449/76190433.png – user237060
ПРИМЕЧАНИЕ: я не хочу код, я хочу больше программы! – user237060