استنساخ الصور مع بدائل هندسية.
يتم توفير صورة مستهدفة كمدخلات. تحاول الخوارزمية العثور على الشكل الأمثل المفرد الذي يمكن رسمه لتقليل الخطأ بين الصورة المستهدفة والصورة المرسومة. يكرر هذه العملية ، إضافة شكل واحد في وقت واحد . هناك حاجة إلى حوالي 50 إلى 200 شكل للوصول إلى نتيجة يمكن التعرف عليها ولكن الفنية والجرأة.
متاح الآن كطبق MAC الأصلي!
https://primitive.lol/
اتبع primitivepic على Twitter لمشاهدة صورة بدائية جديدة كل 30 دقيقة!
يبحث روبوت Twitter عن صور مثيرة للاهتمام باستخدام Flickr API ، ويقوم بتشغيل الخوارزمية باستخدام معلمات عشوائية ، وينشر الصورة باستخدام API Twitter.
يمكنك تغريد صورة إلى الروبوت وستعالجها لك.
قم بتشغيله على صورك الخاصة! أولا ، تثبيت الذهاب.
go get -u github.com/fogleman/primitive
primitive -i input.png -o output.png -n 100
يجب استخدام صور المدخلات الصغيرة (مثل 256x256px). لا تحتاج إلى التفاصيل على أي حال وسيتم تشغيل الرمز بشكل أسرع.
علَم | تقصير | وصف |
---|---|---|
i | ن/أ | ملف الإدخال |
o | ن/أ | ملف الإخراج |
n | ن/أ | عدد الأشكال |
m | 1 | الوضع: 0 = التحرير والسرد ، 1 = مثلث ، 2 = المستقيم ، 3 = القطع الناقص ، 4 = الدائرة ، 5 = RotatedRect ، 6 = Beziers ، 7 = Rotatedellipse ، 8 = Polygon |
rep | 0 | أضف أشكالًا إضافية كل تكرار مع انخفاض البحث (في الغالب جيد بالنسبة إلى Beziers) |
nth | 1 | احفظ كل إطار n (فقط عندما يكون %d في مسار الإخراج) |
r | 256 | تغيير حجم صور إدخال كبيرة بهذا الحجم قبل المعالجة |
s | 1024 | حجم الصورة الإخراج |
a | 128 | اللون ألفا (استخدم 0 للسماح للخوارزمية باختيار ألفا لكل شكل) |
bg | متوسط | بدء لون الخلفية (HEX) |
j | 0 | عدد العمال المتوازيين (يستخدم الافتراضي جميع النوى) |
v | عن | الإخراج المطول |
vv | عن | إخراج مطول جدا |
اعتمادًا على امتداد اسم ملف الإخراج المقدم ، يمكنك إنتاج أنواع مختلفة من الإخراج.
PNG
: ناتج النقطيةJPG
: الناتج النقطيSVG
: إخراج المتجهGIF
: إخراج الرسوم المتحركة التي تُظهر الأشكال التي يتم إضافتها - يتطلب ImageMagick (على وجه التحديد أمر convert
) بالنسبة لمخرجات PNG و SVG ، يمكنك أيضًا تضمين %d
، %03d
، إلخ. في اسم الملف. في هذه الحالة ، سيتم حفظ كل إطار بشكل منفصل.
يمكنك استخدام علامة -o
عدة مرات. بهذه الطريقة يمكنك حفظ كل من PNG و SVG ، على سبيل المثال.
يوضح هذا GIF الطبيعة التكرارية للخوارزمية ، في محاولة لتقليل الخطأ التربيعي المتوسط عن طريق إضافة شكل واحد في وقت واحد. (استخدم ملف الإخراج ".gif" لإنشاء واحدة بنفسك!)
نظرًا لأن الخوارزمية لها مكون عشوائي لها ، يمكنك تشغيلها مقابل نفس صورة الإدخال عدة مرات لإحضار الحياة إلى صورة ثابتة.
إذا كنت على استعداد للتشغيل في الكود ، فيمكنك فرض قيود على الأشكال لإنتاج نتائج أكثر إثارة للاهتمام. هنا ، يتم تقييد المستطيلات للإشارة نحو الشمس في هذه الصورة لغروب الشمس الهرمي.
تُظهر المصفوفة أدناه مثلثات ، علامات القطع والمستطيلات في 50 و 100 و 200 تكرار لكل منهما.
قل أن لدينا Target Image
. هذا ما نعمل عليه من أجل إعادة إنشاء. نبدأ بقماش فارغ ، لكننا نملأه بلون صلب واحد. حاليا ، هذا هو متوسط لون Target Image
. نسمي هذه القماش الفارغ الجديد Current Image
. الآن ، نبدأ في تقييم الأشكال. لتقييم الشكل ، نرسمه فوق Current Image
، وإنتاج New Image
. تتم مقارنة هذه New Image
بالصورة Target Image
لحساب النتيجة. نستخدم خطأ الجذر المربع للنتيجة.
Current Image + Shape => New Image
RMSE(New Image, Target Image) => Score
يتم إنشاء الأشكال بشكل عشوائي. يمكننا توليد شكل عشوائي وتسجيله. ثم يمكننا تحوير الشكل (عن طريق تغيير قمة المثلث ، والتبديل نصف قطر القطع الناقص أو الوسط ، وما إلى ذلك) ونسجله مرة أخرى. إذا تحسنت طفرة النتيجة ، فإننا نحتفظ بها. وإلا فإننا نرد إلى الدولة السابقة. تكرار هذه العملية يعرف باسم تسلق التل. تسلق التلال عرضة للعلق في الحد الأدنى المحلي ، لذلك نحن في الواقع نفعل هذه الأوقات المختلفة مع العديد من أشكال البداية المختلفة. يمكننا أيضًا إنشاء أشكال عشوائية ن واختيار أفضل ما قبل أن نبدأ في تسلق التل. يعتبر الصلب المحاكي خيارًا جيدًا آخر ، لكن في اختباراتي ، وجدت تقنية تسلق التل جيدة وأسرع ، على الأقل لهذه المشكلة بالذات.
بمجرد أن نجد شكلًا جيدًا ، نضيفه إلى Current Image
، حيث ستبقى دون تغيير. ثم نبدأ العملية مرة أخرى للعثور على الشكل التالي للرسم. تتكرر هذه العملية عدة مرات حسب الرغبة.
يتم دعم البدائل التالية:
يمكن إضافة المزيد من الأشكال عن طريق تنفيذ الواجهة التالية:
type Shape interface {
Rasterize () [] Scanline
Copy () Shape
Mutate ()
Draw ( dc * gg. Context )
SVG ( attrs string ) string
}
كان هذا المشروع مستوحى في الأصل من العمل الشهير والممتاز لروجر جوهانسون - البرمجة الوراثية: تطور منى ليزا. منذ رؤية هذا المقال عندما كان جديدًا تمامًا ، قمت بالعبث مع هذه المشكلة هنا وهناك على مر السنين. لكن الآن أنا راضٍ فقط عن نتائجي.
تجدر الإشارة إلى أن هناك اختلافات كبيرة في تنفيذي مقارنةً بعمل روجر الأصلي. الألغام ليست خوارزمية وراثية. يعمل منجم فقط على شكل واحد في وقت واحد. منجم أسرع بكثير (AFAIK) ويدعم العديد من أنواع الأشكال.
فيما يلي المزيد من الأمثلة من الصور المثيرة للاهتمام الموجودة على Flickr.