İskelet bulma yöntemi ile karakter okuma
Açıklama: Verilen bir resimde, bulunan nesnelerin iskeletlerini çıkarma.
Girdi: I
-> Resim (renkli veya gri)
Çıktı: skeletons
-> I
‘da bulunan nesnelerin iskeletleri
Örnek: Fotoğraf makinesiyle çekilen veya tarayıcıdan alınan bir yazıdaki karakterlerin ayrıştırılıp, piksel değerlerinin bulunması.
clear, clc filename = 'merhaba.jpg'; I = imread(filename); imshow(I) characters = getObjectSkeletons(I); nCharacters = length(characters); for i=1:nCharacters rows = characters{i}; subplot(1,nCharacters,i) plot(rows(:,2),rows(:,1),'.') axis ij % resim gibi çiz axis equal title([int2str(i) '. karakter']) end
English description: Finding the skeletons of the objects in an image illustrated with a character acquisition example.
Kaynak kod
% Verilen bir resimde, bulunan nesnelerin iskeletleri % % Girdi: I -> Resim (renkli veya gri) % % Çıktı: skeletons -> I'da bulunan nesnelerin iskeletleri % % % Örnek: % clear, clc % filename = 'merhaba.jpg'; % I = imread(filename ); % imshow(I) % % characters = getObjectSkeletons(I); % nCharacters = length(characters); % for i=1:nCharacters % rows = characters{i}; % subplot(1,nCharacters,i) % plot(rows(:,2),rows(:,1),'.') % axis ij % resim gibi çiz % axis equal % title([int2str(i) '. karakter']) % end function skeletons = getObjectSkeletons(I) % Otsu eşikleme ile eşik değerini bulalım threshold = graythresh(I); bw = im2bw(I, threshold); imshow(bw) % Çizimler koyu yapılır, kağıt da beyazdır. Fakat bizim bulmak % istediğimiz değerler tam tersi olmalı, yani yazıların beyaz olması lazım, % arkaplanın da 0 olması lazım. bw2 = ~bw; % Çizimlerin iskeletini çıkaralım. (inf parametresi tek çizgi kalana kadar çalışması için.) bw3 = bwmorph(bw2, 'thin', inf); % imshow(bw3) % Resmi bulduk, fakat bize bulunan nesnelerin piksel değerleri lazım % Delikleri de gözardı edelim skeletons = bwboundaries(bw3, 'nohole'); % Normalde bwboundaries fonksiyonu başladığı noktaya dönüyor ve dolayısıyla % bazı noktalar iki adet olmuş oluyor. İlk yarısını almak delikli % nesnelerde problem yaratıyor. Eğer alttaki kod silinirse, noktalardan % ikişer adet olabilir fakat sıralı olmuş olurlar. nObjects = length(skeletons); for i = 1:nObjects skeletons{i} = unique(skeletons{i}, 'rows'); end