Bagaimana cara menghapus silau dan kecerahan dalam suatu gambar (Image preprocessing)?

19

Saya punya gambar

masukkan deskripsi gambar di sini

Apakah ada cara untuk menghilangkan bercak putih terang? Tolong bantu, terima kasih

Edit:

Setelah beroperasi dengan gaussian dan kemudian menampilkan menggunakan imagesc, dapatkan output berikut yang dengan jelas menunjukkan bintik-bintik merah terang.

masukkan deskripsi gambar di sini

Saluran Merah:

masukkan deskripsi gambar di sini

Jalur Hijau:

masukkan deskripsi gambar di sini

Saluran biru:

masukkan deskripsi gambar di sini

Edit 2:

Deteksi cacat menggunakan filter Gabor

masukkan deskripsi gambar di sini

Histogramnya:

masukkan deskripsi gambar di sini

Bagaimana cara menghitung ambang yang sesuai secara adaptif.?

vini
sumber
Apakah pengaturan lampu diketahui?
nav
Tidak sebenarnya, apakah tidak ada cara untuk menghapus ini ke tempat-tempat melalui penyaringan dll?
vini
4
Secara umum, ini adalah masalah buruk. Anda memiliki terlalu banyak hal yang tidak diketahui dan harus menggunakan solusi berbasis heuristik. Semoga beruntung memilih jawaban.
nav

Jawaban:

19

Mari kita asumsikan bagian silau adalah satu-satunya area jenuh dalam gambar. Deteksi dapat dilakukan dengan menetapkan intensitas (kode dalam Mathematica):

saturated = Binarize[ColorConvert[img, "Grayscale"], .9]

masukkan deskripsi gambar di sini

Maka kita hanya perlu mengganti bagian gambar di sekitar topeng saturasi (memperbesar topeng dilakukan oleh fungsi morfologis Dilation). Mewarisi menggunakan sintesis tekstur (menggunakan fungsi Inpaint) tampaknya bekerja dengan baik dalam contoh ini, meskipun saya tidak bisa mengujinya sebagai input untuk algoritma deteksi cacat Anda:

Inpaint[img, Dilation[saturated, DiskMatrix[20]]]

masukkan deskripsi gambar di sini

Matthias Odisio
sumber
apakah ada metode inpaint di matlab?
vini
Maaf, saya tidak tahu jawabannya.
Matthias Odisio
Deteksi cacat sempurna namun pewarnaan harus diterapkan karena tidak ada fungsi bawaan di MATLAB
vini
1
Saya senang bahwa jawabannya menyelesaikan masalah. Sedangkan untuk pengecatan dalam matlab, itu mungkin cocok untuk pertanyaan independen tentang SO. Lihat stackoverflow.com/search?q=matlab+inpainting sebagai permulaan.
Matthias Odisio
2
Inpainting dapat dilakukan dengan apa yang umumnya dikenal sebagai "Poisson image blending" Tutorial di sini , kode Matlab dan contoh di sini .
Maurits
4

Ini mungkin sedikit jawaban yang simplistis, tetapi bisakah Anda mengesampingkan saja? misalnya:

img = imread('daRNS.png');
imflat = img; 
imflat(img>150) = 150; 
imagesc(imflat)

menghasilkan:

gambar rata

Jelas akan lebih baik untuk memilih ambang batas secara adaptif. Misalnya Anda bisa melihat histogram gambar:

hist(double(img(:)),0:255)

histogram

dan mencoba untuk memilih ambang batas yang sesuai berdasarkan itu.

tdc
sumber
tolong periksa edit saya 2
vini
@vini Coba lihat cut-off di mana 90% dari sinyal dijelaskan
tdc
saya hanya bisa mengirik tetapi tujuan akhir saya adalah deteksi cacat .. yang tidak membantu dengan cara apa pun jika saya
mengiriknya
3
Tetapi pertanyaan Anda adalah "Bagaimana cara menghapus silau dan kecerahan dalam suatu gambar (Image preprocessing)?" bukan cara mendeteksi cacat, yang merupakan pertanyaan lain (lebih sulit). @mrkulk di bawah ini tampaknya telah memberikan jawaban yang hampir lengkap untuk pertanyaan itu di bawah ini.
tdc
ya pertanyaan saya adalah bahwa saya sekarang bagaimana mendeteksi cacat namun sorotan ini menghalangi hasilnya
vini
2

masukkan deskripsi gambar di siniTanpa informasi penerangan, itu sulit. Namun, jika bentuk objek dalam gambar diketahui, Anda dapat mengatur templat bentuk silau putih (gaussian) dan melakukan jendela geser untuk menemukan kemungkinan deteksi silau (diikuti oleh pencampuran warna dari area yang berdekatan). Persepsi, kami menyimpulkan bentuk 3D dari gambar menggunakan shading. Jika bentuk dari naungan mampu memberikan gradien permukaan, kita bisa melakukan jendela geser dan memeriksa templat silau di setiap lokasi.

Setelah deteksi tepi cerdik: -

masukkan deskripsi gambar di sini

Pada dasarnya, tumpang tindih (area tumpang tindih maks) antara gambar # 1 dan # 2 akan menjadi cacat.

mrkulk
sumber
Menjelaskan apa yang saya coba lakukan - saya menerapkan filter gabor yang sebagian besar digunakan untuk segmentasi tekstur untuk menemukan cacat pada buah-buahan tetapi silau menimbulkan masalah karena filter menampilkan dua bintik-bintik putih juga sebagai cacat potensial yang saya tidak ingin inginkan
vini
apakah Anda mencoba hanya mengambil saluran individual (dari RGB atau YUV) dan hanya mengoperasikannya?
mrkulk
Gambar yang paling mencolok adalah yang ada di saluran hijau .. Bagaimana cara saya mengoperasikan dan memperbaikinya?
vini
Saya mencoba mengambil gambar tepi (cerdik) dengan ambang batas 0,5. Seperti yang diharapkan, saya tidak melihat sorot pada gambar. Ini harus memberi Anda yang kuat sebelum untuk daerah yang TIDAK mengandung silau.
mrkulk
bagaimana ini akan membantu saya dalam menghasilkan gambar bebas silau?
vini
0

Pendapat saya adalah bahwa ini adalah masalah penglihatan mesin di mana Anda harus mengendalikan pencahayaan dan memiliki ide bagus tentang kecerahan maksimum kecerahan piksel non-silau pada gambar. Deteksi cacat umumnya masalah visi mesin daripada masalah visi komputer.

Apa yang kita lihat sebagai hasil pencahayaan adalah tambahan dari pantulan cahaya specular dan difus (ditambah beberapa pancaran tetapi diabaikan di sini).

Komponen specular adalah silau, pada permukaan mengkilap seperti apel ini, itu jauh lebih dari refleksi difus (> 10x)

Ini berarti bahwa jika Anda mengatur pencahayaan Anda, mendapatkan dan eksposur sebelum ini, pada permukaan difus, Anda dapat yakin bahwa tidak ada yang akan mendekati jenuh. Jadi menggunakan ambang batas tetap sebenarnya adalah solusi yang lebih disukai di sini, selama Anda telah membuktikan dengan data yang cukup bahwa "tidak ada piksel yang tidak mengandung silau" akan berada di atas ambang batas. Intinya, Anda mengatur kondisi pencahayaan, dan parameter kamera sedemikian rupa sehingga klasifikasi piksel menjadi sepele, dalam hal ini dilakukan oleh ambang sederhana, alih-alih fungsi piksel yang dipelajari mesin yang lebih kompleks di sekitarnya.

Saya suka pendekatan "vini", tidak perlu menunjukkan pesawat RGB. Hanya ambang grayscale sederhana yang benar-benar berfungsi di sini.

1 - Anda merancang kondisi pencahayaan, tidak ambient

2- membuat pekerjaan klasifikasi sangat sepele (thresholding)

3 - mengukur fitur

4 - bandingkan dengan toleransi

Denis
sumber
0

Konversikan ke ruang warna lab terlebih dahulu, mapminmax, lalu gunakan saluran luminositas pertama. Itu mengurangi masalah warna. Kemudian gunakan beberapa thresholding di atas 80% pixel paling terang. Periksa dan uji penurunan dalam histogram, ambang batas terbaik adalah di dekat bagian bawah penurunan. Jika tidak ada min lokal di wilayah ini gambar Anda mungkin memiliki refleksi minimal ...... Martin

Pasar
sumber