2

hand drawn line with irregularitiesMatlabda elle çizilmiş çizgiyi nasıl düzleştirebilirim?

Köşeleri tespit etmem gereken bir görüntü işleme projesi üzerinde çalışıyorum. Ancak, corner işlevini kullanarak köşeleri algılamaya çalıştığımda, küçük yer değişimlerini gösterildiği gibi köşeler olarak algılar. Wrong detection of corners

0'dan 0.24'e kadar farklı eşikleri denedim ve yemek sonuçlarını alamadım. İşte

tam boy orijinal ve çıkış görüntüleri şunlardır:

imgskele = bwmorph(imgfill,'thin',Inf); 
C = corner(imgspur, 'SensitivityFactor', 0.24); 
figure; imshow(imgspur); 
hold on; 
plot(C(:,1), C(:,2),'bo','MarkerSize',10,'MarkerFaceColor','g'); 
hold off; 

Yani ben

düzenleme 1 bu noktalarda bağlantı düz çizgi yapmak için çizgiyi ayarlanması (yeniden çizmek) düşünüyorum: enter image description here

+0

Bu Peucker'ın algoritmasını belki de istiyor musun? Vikipedi Ramer – Douglas – Peucker algoritması –

+0

@MarkSetchell: Muhtemelen buralarda aşırı fazladır, ama temel fikir mantıklıdır. – MSalters

+0

* "başlangıç ​​resminiz" *, * "sonuç görüntüsü" * ile eşleşmiyor. Bu nedenle OpenCV'nin neden köşeler olduğunu düşünmesine neden olduğunu görmek zor. * "Köşeleri" içeren tam başlangıç ​​görüntüsünü gösterir misiniz * lütfen? –

cevap

3

Sahip olduğunuz sorun, corner işlevinin doldurulmuş p köşesini bulan Harris köşe algılayıcısı olmasıdır. olygons.

Şimdi bir çizgi çok pikselli bir pikselle yaklaşık olarak tahmin edilebilir, kesinlikle pikselli olduğunda, ancak burada gördüğünüz gibi mükemmel değil.

Görüntüdeki çizgi özelliklerini bulmak için daha sağlam bir yöntem Hough dönüşümü gibi bir şey kullanmaktır. Bu satırların kimi kesişme noktalarına sahip kesişme noktaları vardır. Diğerleri sahte kavşaklardır, çünkü Hough dönüşümü hat segmentlerini değil, satırları üstlenir. Ne kabul ettiğinizi ve neyi reddettiğinizi biraz denemelisiniz. Köşeye artık çağrı yapmadan önce bir köşe nasıl olabilir?

+0

Harris köşe dedektörü ile ilgili ipucu için teşekkürler .. Hough dönüşümü hakkında Ben zaten hatları tespit etmek için hough dönüşüm kullanmayı denedim, ama aynı sorunla karşılaşmıştı, aynı zamanda elle çizilmiş doğası nedeniyle satırlar, tüm satırlar algılanmadı. Soruyu burada yayınladım: http://stackoverflow.com/questions/36485935/how-to-detect-hand-drawn-lines-using-hough-transform-in-matlab Bu yüzden köşeyi kullanmaya çalıştım algılama, kusurlu çizgilerin yerini alan aralarında düz çizgiler oluşturmak için köşeleri bağlayabilmem için –