Verlängern Sie die Linie

8

Aufgabe

Wenn Sie ein Bild mit einer Linie darauf haben, erstellen oder zeigen Sie ein Bild an, bei dem die Linie die Linie bis zum Bildrand verlängert. Die Linie ist schwarz und der Hintergrund ist weiß. Die Bildgröße ist 100x100Das Bild kommt in jedem vernünftigen Format (zB jpg, png, ppm, bmp).

Zeilenformat

Ich verwende eine vereinfachte Version von Bresenhams Linienalgorithmus zum Zeichnen von Linien. Linien haben nur eine ganzzahlige Steigung, so dass die Linie ein Pixel niemals teilweise bedeckt, sondern nicht färbt:

( Wikipedia Bild )

Die Linie ist mindestens 3x3, es sei denn, die Linie ist gerade. In diesem Fall sehen Sie im Bild nur 3x1 oder 1x3. Linien haben auch eine Seite am Bildrand, sodass Sie sie nur in eine Richtung verlängern müssen.

Beispiel ( .pngrote Linie hinzugefügt, damit Sie es sehen können):

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Echte Beispiele ( .png)

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

====================

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

====================

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

====================

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

====================

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

J Atkin
quelle
Müsste das Programm die Bildeingabe als Dateinamen verwenden oder könnte es Eingaben in anderen Formen vornehmen? (zB Hexdump, Link, Upload, Kopieren / Einfügen) Ich frage nur, weil einige Programmiersprachen die Verwendung anderer Eingabeformen erfordern würden.
DanTheMan
1
Ich kenne keine Sprachen, die eine Bilddatei nicht lesen können. Kennen Sie ein allgemeines Format, das ich als gültig in den E / A-Abschnitt aufnehmen kann?
J Atkin
@JAtkin können wir Eingaben als URL nehmen?
Downgoat
Ich denke ... Warum willst du das?
J Atkin

Antworten:

2

Mathematica, 125 Bytes

ImageRotate@Image@SparseArray[Array[Floor,101,#&@@ImageLines[ColorNegate@#,Method->"RANSAC"]]+1->0,{101,101},1][[;;-2,;;-2]]&

Erläuterung

ImageLinesErkennen Sie Linien im Bild mit der Methode RANSAC. Wir nehmen die erste erkannte Linie und konvertieren sie zurück in ein Bild. Die gesamte Funktion nimmt ein Bild als Argument und gibt ein Bild zurück.

njpipeorgan
quelle