Yalnızca morfolojik işlemleri kullanarak bir görüntüdeki metni nasıl yeniden oluştururum?


16

Mümkün olan en iyi şekilde aşağıdaki görüntüden metni yeniden oluşturmak istiyorum. Zor kısmı, sadece görüntüdeki morfolojik işlemleri kullanarak yapmak istiyorum

Erozyon, dilatasyon, açma ve kapama kullanmayı denedim ama sonuç çok iyi değil.

Bu mümkün mü?

resim açıklamasını buraya girin


Dilatasyon, bulanık kenarları düzeltmek için ilk adım gibi mi görünüyor?
Paul R

Evet, bence bu denediğim her kombinasyonun ilk adımı.

2
Bence probleminizi daha fazla tanımlamanız gerekiyor. Örneğin, nasıl daha okunaklı hale getirebileceğinizi kastediyorsanız, muhtemelen biraz genişleme yeterlidir. Herhangi bir bozulma işleminden önce tam olarak nasıl göründüğünü yeniden yapılandırmak istiyorsanız, bu mümkün değildir, çünkü morfolojik algoritmanız kullanılan belirli yazı tipinin şekilleri hakkında hiçbir bilgiye sahip değildir.
so12311

Daha okunabilir hale getirmek için [0 1 0; 1 1 1; 0 1 0]. Metnin orijinaline çok yakın görünmesini sağlayacak bir şey arıyorum.
Jackobsen

Yanıtlar:


6

Morfolojik olarak dönüştürülmüş görüntüler eklemek / çıkarmak vb. İstiyorsanız, her pikselin çevresinde kaç sinyal pikseli olduğunu ve bu sayıya göre eşiği sayabilirsiniz.

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;

resim açıklamasını buraya girin

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

resim açıklamasını buraya girin

Daha sonra, ortasında bir delik bulunan 3x3 bir maske ile kıvrılırsanız, şöyle bir şey elde edebilirsiniz:

resim açıklamasını buraya girin


3

Bu çözülmesi oldukça ilginç bir problem! Ortalama bir filtre deneyin . Daha fazla ayrıntı için buradaki ve buradaki referanslara bakın.

Sorununuzu simüle etmek için ellerimi koymamış olmama rağmen, bu bir öneri. Bağırsak hissim bunun size büyük fayda sağlayabileceğini söylüyor çünkü tuz-n-biber tipindeki gürültüye karşı olduğu bilinmektedir. Sizin durumunuzda, resimlerin kenarlık çevresinde, alfabenin hangi tarafına bağlı olarak tam beyaz veya tam siyaha dönüştürülecek ekstra beyaz noktalar vardır. Medyan filtrelemenin ardından şöyle görünür:

resim açıklamasını buraya girin


1

Herhangi bir nedenle morfolojik işlemleri kullanmakla sınırlıysanız, odaklı yakın işlemlerin "oylama şemasını" kullanmayı düşünebilirsiniz.

Morfolojik operasyonlarla ilgili bir problem, yönlülüğü gerçekten dikkate almamalarıdır. Merkez piksel için böyle bir mahalle

1 0 0
1 1 0
0 1 1

böyle bir mahalleden gerçekten farklı değil

0 1 0
1 1 0
1 1 0

Bu, sorunlara neden olabilir, çünkü dilatasyon ve erozyon, istediğiniz zaman yönelimli olarak önyargılı değildir. Yapabileceğiniz bir şey, çekirdekler gibi en uygun yönlü önyargılı morfolojik işlemi bulmaktır:

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 . . .

Bu 5 x 5 çekirdeklerde daha iyi olurdu, ama bence fikir yeterince açık. Temel olarak, bir köşe algılama çekirdeği fikri, bir çizgi segmenti algılama çekirdeği olacak şekilde biraz gerilir. En uygun eğrileri bulmak için de kullanabilirsiniz:

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

Açıkçası bu çok sayıda çekirdeğe yol açar, ancak temel fikir çalışmaları sizin için umut veriyorsa, tekniği en uygun kernelin tek bir geçişte bulunması için optimize etmenin bir yolu vardır.

Her durumda, birden çok çekirdek ve bazı mantık kullanırsanız, (x, y) 'deki her işlem geleneksel bir morfolojik adımdan daha fazla hesaplama gerektirir:

  1. Her pikselde (x, y), birkaç morfolojik operatörün her birini uygulayın. Her operatör için, hem morfolojik işlemin sonucunu hem de girdinin çekirdeğe ne derece eşleştiğini hesaplayın. ("Derece" = eşleşen piksel sayısı)
  2. Gerçek açma / kapama piksel yapılandırmasına en yakın çekirdek için morfolojik sonucu seçin.

Çekirdeğin boyutu, girişin boyutuyla eşleşmelidir. Daha büyük bir çekirdek kullanmak yerine, işlem sayısını azaltmak için bir "yayılmış" çekirdek kullanabilirsiniz. Aşağıdaki çekirdek, yarıçapı 1'den büyük olan sadece 3 x 3 çekirdektir.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.