Bagaimana cara menambahkan anotasi visual ke gambar menggunakan python di notebook jupyter?

Tujuan keseluruhannya adalah untuk melihat gambar medis dari beberapa server, menambahkan anotasi visual ke gambar tersebut (yaitu, menyorot/melingkari tumor dengan warna merah), lalu mengunggah gambar tersebut kembali ke server dengan anotasi tersebut sebagai semacam metadata.

Melihat/mengunggah/menyimpan metadata pada dasarnya sudah selesai, tetapi saya belum menemukan paket apa pun yang memungkinkan saya menggambar gambar di dalam buku catatan jupyter. Ini bisa memanipulasi piksel atau membuat gambar baru di atas gambar yang ditampilkan.

Saat ini saya sedang menampilkan data gambar menggunakan matplotlib.

Saya telah melihat beberapa penggunaan javascript untuk melacak pergerakan mouse dan penekanan tombol, tetapi tidak tahu cara menggunakannya untuk keuntungan saya. Saya dapat menggunakan paket apa pun, asalkan berfungsi dalam jupyter.


person sutartmelson    schedule 06.06.2016    source sumber
comment
Menurut saya Jupyter bukan alat yang tepat untuk pekerjaan itu, sepertinya Anda ingin mengembangkan aplikasi web.   -  person Edu    schedule 07.06.2016
comment
@Edu Meskipun saya setuju dengan Anda, sayangnya ini adalah keterbatasan saya saat ini dalam pekerjaan :/   -  person sutartmelson    schedule 07.06.2016
comment
Untuk memperjelas pertanyaan Anda, apakah Anda mengatakan bahwa Anda ingin dapat menampilkan gambar mentah terlebih dahulu lalu dengan melacak pergerakan mouse dan klik menggambar lingkaran dan panah pada gambar itu- dan melakukan semuanya di dalam konteks buku catatan Jupyter?   -  person michael_j_ward    schedule 07.06.2016
comment
@michael_j_ward, Benar. Jelasnya, menampilkan gambarnya cukup sederhana. Melacak pergerakan mouse dan klik dimungkinkan dalam konteksnya. Hanya tidak yakin bagaimana menerapkannya pada gambar, jika memungkinkan.   -  person sutartmelson    schedule 07.06.2016
comment
@sutartmelson, mengerti. Mungkin ini berguna: matplotlib.org/examples/pylab_examples/cursor_demo.html Dan diskusi stackoverflow ini: stackoverflow.com/questions/9136938/ Saya sendiri belum pernah melakukan hal seperti ini. Jika Anda menemukan solusinya, silakan bagikan.   -  person michael_j_ward    schedule 07.06.2016


Jawaban (2)


Berkat saran dari @michael_j_ward, saya menemukan solusinya. Saya melihat diskusi dan tutorial tersebut serta membaca dokumentasi untuk sumbu matplotlib. Inilah yang saya buat/ubah

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import numpy as np
import dicom


class Annotator(object):
    def __init__(self, axes):
        self.axes = axes

        self.xdata = []
        self.ydata = []

    def mouse_move(self, event):
        if not event.inaxes:
            return

        x, y = event.xdata, event.ydata

        self.xdata.append(x)
        self.ydata.append(y)
        line = Line2D(self.xdata,self.ydata)
        line.set_color('r')
        self.axes.add_line(line)

        plt.draw()

    def mouse_release(self, event):
        # Erase x and y data for new line
        self.xdata = []
        self.ydata = []

path = '../sample.dcm'

data = dicom.read_file(path)

img = data.pixel_array

fig, axes = plt.subplots()
axes.imshow(img[0])
plt.axis("off")
plt.gray()
annotator = Annotator(axes)
plt.connect('motion_notify_event', cursor.mouse_move)
plt.connect('button_release_event', cursor.mouse_release)

axes.plot()

plt.show()

tangkapan layar

Ini memungkinkan saya membuka gambar dan menggambarnya untuk menyorot atau memberi anotasi pada bagian penting gambar.

person sutartmelson    schedule 07.06.2016
comment
Dari mana cursor berasal? Saya mendapatkan NameError: nama 'kursor' tidak ditentukan - person MrMartin; 06.05.2019

Di dalam notebook Jupyter Anda dapat menggunakan:

%matplotlib inline
person Kevin K.    schedule 06.06.2016