Bagaimana cara merekonstruksi teks dari gambar hanya menggunakan operasi morfologis?

16

Saya ingin merekonstruksi teks dari gambar berikut ini sebaik mungkin. Bagian yang sulit adalah saya ingin melakukannya hanya menggunakan operasi morforogis pada gambar

Saya mencoba menggunakan erosi, pelebaran, pembukaan dan penutupan tetapi hasilnya tidak terlalu bagus.

Apakah ini mungkin?

masukkan deskripsi gambar di sini

Jackobsen
sumber
Pelebaran terlihat seperti langkah pertama yang jelas untuk menghaluskan tepi fuzzy itu?
Paul R
Ya, saya pikir ini adalah langkah pertama dari setiap kombinasi yang saya coba.
2
Saya pikir Anda perlu mendefinisikan masalah Anda lebih lanjut. Misalnya jika Anda maksudkan bagaimana Anda membuatnya lebih mudah dibaca, maka sedikit pelebaran mungkin cukup. Jika Anda ingin merekonstruksi dengan tepat bagaimana tampilannya sebelum proses distorsi apa pun, maka itu tidak mungkin, karena algoritma morfologis Anda tidak memiliki pengetahuan tentang bentuk-bentuk font tertentu yang digunakan.
so12311
Agar lebih mudah dibaca saya membuat imdilate dengan [0 1 0; 1 1 1; 0 1 0]. Saya mencari sesuatu yang akan membuat teks terlihat sangat dekat dengan yang asli.
Jackobsen

Jawaban:

6

Jika Anda ingin menambah / mengurangi dll. Gambar yang ditransformasikan secara morfologis, Anda dapat menghitung berapa banyak piksel sinyal di sekitar setiap piksel, dan ambang batas berdasarkan angka itu.

img = imread('http://i.stack.imgur.com/wicpc.png');

n = false(3);n(4) = 1;
s = false(3);s(6) = 1;
w = false(3);w(2) = 1;
e = false(3);e(8) = 1;

%# note that you could convolve with a cross instead
fourNeighbourCount = imerode(img,n) + imerode(img,s) + imerode(img,w) + imerode(img,3) + img;

masukkan deskripsi gambar di sini

%# require at least two neighbours
img = fourNeighbourCount > 1;

masukkan deskripsi gambar di sini

Jika Anda berbelok dengan topeng 3x3 yang memiliki lubang di tengah, Anda bisa mendapatkan sesuatu seperti ini:

masukkan deskripsi gambar di sini

Jonas
sumber
3

Ini masalah yang cukup menarik untuk dipecahkan! Coba filter median . Lihat referensi di sini dan di sini untuk lebih jelasnya.

Meskipun saya belum menempatkan tangan saya untuk mensimulasikan masalah Anda, ini adalah saran. Perasaan saya mengatakan bahwa itu mungkin memberi Anda manfaat besar karena, dikenal untuk melawan jenis kebisingan garam-lada. Dalam kasus Anda, gambar memiliki titik-titik putih ekstra di sekitar perbatasan yang akan dikonversi menjadi putih penuh atau hitam penuh tergantung pada sisi alfabet itu. Berikut ini tampilannya setelah pemfilteran median:

masukkan deskripsi gambar di sini

Dipan Mehta
sumber
1

Jika karena alasan tertentu Anda terbatas menggunakan operasi morfologis, maka Anda dapat mempertimbangkan untuk menggunakan "skema pemungutan suara" dari operasi tertutup yang berorientasi.

Satu masalah dengan operasi morfologis adalah bahwa mereka tidak benar-benar mempertimbangkan directionality. Untuk piksel tengah, lingkungan seperti ini

1 0 0
1 1 0
0 1 1

benar-benar tidak berbeda dari lingkungan seperti ini

0 1 0
1 1 0
1 1 0

Hal itu dapat menyebabkan masalah karena pelebaran dan erosi tidak bias arah ketika Anda menginginkannya. Jadi satu hal yang dapat Anda lakukan adalah menemukan operasi morfologi bias yang paling sesuai arah menggunakan kernel seperti ini:

1 1 0   1 0 0   1 0 0
0 1 0   1 1 0   1 1 0
0 1 1   0 1 1   0 1 1 . . .

Ini akan lebih baik dengan kernel 5 x 5, tapi saya pikir idenya cukup jelas. Pada dasarnya, ide kernel deteksi sudut adalah peregangan sedikit sehingga merupakan kernel deteksi segmen garis. Anda juga dapat menggunakannya untuk menemukan kurva yang paling pas:

0 0 0 1 1
0 0 1 1 0
0 1 1 0 0 
0 0 1 1 0
0 0 0 1 1

Jelas ini mengarah ke sejumlah besar kernel, tetapi jika ide dasar berfungsi menjanjikan bagi Anda, ada cara untuk mengoptimalkan teknik sehingga kernel yang paling cocok ditemukan dalam satu pass.

Bagaimanapun, jika Anda menggunakan banyak kernel dan beberapa logika, setiap operasi di (x, y) membutuhkan lebih banyak perhitungan daripada langkah morfologis tradisional:

  1. Pada setiap piksel (x, y), terapkan masing-masing dari beberapa operator morfologi. Untuk setiap operator, hitung baik hasil operasi morfologis DAN sejauh mana input cocok dengan kernel. ("Gelar" = jumlah piksel yang cocok)
  2. Pilih hasil morfologis untuk kernel yang paling cocok dengan konfigurasi on / off pixel yang sebenarnya.

Ukuran kernel harus dicocokkan dengan ukuran input. Daripada menggunakan kernel yang lebih besar, Anda bisa menggunakan kernel "spread" untuk mengurangi jumlah operasi. Kernel berikut ini hanya kernel 3 x 3 dengan radius lebih besar dari 1.

1 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1 0 0 0
0 0 0 0 0 0 0
1 0 0 0 0 0 1
Rethunk
sumber