Temukan perubahan signifikan dalam daftar dengan Python

Jadi saya punya sedikit kode ini

for x in range(x1,x2):
        for y in range(y1, y2):
            cpixel = pixels[x, y]
            if bw:
                bw_value = int(round(sum(cpixel) / float(len(cpixel))))
                all_pixels.append(bw_value)
                title = "Averaged (B&W) Pixel Values"
            else:
                if lumi:
                    luma = (0.3 * cpixel[0]) + (0.59 * cpixel[1]) + (0.11 * cpixel[2])
                    all_pixels.append(luma)
                    title = "Pixel Luminosity Values"
                else:
                    if round(sum(cpixel)) / float(len(cpixel)) > 100:
                        all_pixels.append(255)
                    else:
                        all_pixels.append(0)
                    title = "Pixel Binary Transform Values"

diambil dan dimodifikasi sedikit dari sini Mendapatkan daftar nilai piksel dari PIL untuk memberikan daftar nilai piksel (all_pixels) dalam wilayah pembatas (dipilih pengguna).

Saya mencoba mencari cara yang efisien untuk mendeteksi perubahan dalam daftar setelah serangkaian nilai serupa dicatat. Karena daftar tersebut sepertinya mencantumkan nilai piksel dari atas ke bawah dan kiri ke kanan. Dalam skenario dimana saya akan menggunakannya, ia akan memiliki daftar nilai yang serupa hingga mencapai wilayah gambar di mana nilainya kemudian akan mulai beralih bolak-balik hingga nilainya sekali lagi stabil di sekitar nilai baru.

Yang saya minati adalah melacak batas antara keduanya, saya ingin mendeteksi di mana letak batas ini dan apakah bergeser ke kiri atau ke kanan. Saya tidak bisa memikirkan cara lain selain harus memeriksa setiap nilai yang ditambahkan ke all_pixels dan kemudian menelusuri kembali koordinatnya.

Namun hal ini tampaknya agak samar karena meskipun saya menetapkan sejumlah nilai yang berubah-ubah menjadi sama sebelum nilai berikutnya yang berbeda secara signifikan dipandang sebagai perubahan yang signifikan, bukan sekadar outlier, setelah itu nilai-nilai tersebut mulai beralih di antara nilai-nilai yang lama. dan yang baru.

Saya kira idealnya saya perlu membuat semacam garis yang paling sesuai untuk koordinat wilayah/garis batas ini. Saya hanya perlu beberapa ide bagaimana mengatasi masalah ini.


person DamianJ    schedule 14.06.2012    source sumber
comment
Apa sebenarnya yang Anda maksud dengan 'perubahan signifikan'? Dan untuk apa? Sepertinya Anda ingin melakukan semacam pelacakan gerak.   -  person Junuxx    schedule 14.06.2012
comment
Memang benar, pada dasarnya saya memiliki bubuk di dalam silinder dan saya ingin melacak volumenya saat bubuk tersebut memadat setelah disadap. Batas yang saya bicarakan adalah garis bagian atas bubuk yang dihasilkan oleh bayangannya. Nilai apa pun yang lebih besar daripada yang dihasilkan oleh wilayah bayangan akan sangat signifikan. Pada dasarnya saya mengambil gambar setelah setiap ketukan dan itulah cara saya mencoba melacak perubahannya.   -  person DamianJ    schedule 14.06.2012


Jawaban (2)


Berdasarkan uraian masalah dalam komentar Anda, menurut saya detektor tepi sederhana mungkin sudah cukup, meskipun hal itu bergantung pada hal-hal seperti sudut kamera, kontras, pencahayaan, dll.

Anda dapat mengambil turunan vertikal dari gambar, mungkin menghaluskannya sedikit dan menemukan baris dengan nilai tertinggi. Dengan asumsi bahwa gambar diperbesar pada silinder tanpa kontras vertikal besar lainnya selain batas bubuk, maka itu adalah tinggi bubuk.

Anda dapat membuat kodenya sendiri, atau menggunakan OpenCV, tapi menurut saya itu mungkin agak berlebihan untuk tugas ini. Numpy juga bisa menjadi pilihan yang bagus.

person Junuxx    schedule 14.06.2012
comment
Terima kasih atas sarannya, saya akan lihat apa yang saya hasilkan. - person DamianJ; 14.06.2012

Dari uraian Anda, sepertinya Anda sebaiknya menggunakan perpustakaan visi komputer, daripada mencoba menulis kode deteksi gambar Anda sendiri.

Berikut pembahasan computer vision dengan Python: Apa perpustakaan visi komputer yang bagus untuk Python yang memungkinkan saya menemukan wajah dalam video Flash/HTML5?

Sepertinya OpenCV adalah pilihan terbaik.

http://opencv.willowgarage.com/

person steveha    schedule 14.06.2012