Perpanjang garis

8

Tugas

Diberikan gambar dengan garis di atasnya, menghasilkan atau menampilkan gambar dengan garis memperpanjang garis ke tepi gambar. Garis hitam dan latar belakang putih. Ukuran gambar adalah 100x100gambar yang datang dalam format yang wajar (misalnya jpg, png, ppm, bmp).

Format garis

Saya menggunakan versi sederhana dari algoritma garis Bresenham untuk menggambar garis. Garis hanya akan memiliki kemiringan integer sehingga garis tidak akan pernah menutupi sebagian piksel tetapi tidak mewarnainya:

( Gambar Wikipedia )

Minimal garis akan 3x3 kecuali garis lurus, dalam hal ini Anda hanya akan melihat 3x1 atau 1x3 pada gambar. Garis juga akan memiliki satu sisi di tepi gambar, jadi Anda hanya perlu memperpanjangnya dalam satu arah.

Contoh ( .png, garis merah ditambahkan sehingga Anda dapat melihatnya):

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Contoh nyata ( .png)

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

J Atkin
sumber
Apakah program harus mengambil input gambar sebagai nama file atau apakah akan diizinkan untuk mengambil input dalam bentuk lain? (misalnya hexdump, tautan, unggah, salin / tempel) Saya hanya bertanya karena beberapa bahasa pemrograman akan memerlukan penggunaan bentuk input lain.
DanTheMan
1
Saya tidak tahu bahasa apa pun yang tidak bisa membaca file gambar. Apakah Anda tahu format umum yang dapat saya sertakan di bagian I / O sebagai valid?
J Atkin
@JAtkin bisakah kita mengambil input sebagai URL?
Downgoat
Saya kira ... Mengapa Anda mau?
J Atkin

Jawaban:

2

Mathematica, 125 byte

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

Penjelasan

ImageLinesmendeteksi garis pada gambar dengan metode RANSAC. Kami mengambil garis yang terdeteksi pertama dan mengubahnya kembali menjadi gambar. Seluruh fungsi mengambil gambar sebagai argumen dan mengembalikan gambar.

njpipeorgan
sumber