MATLAB'ta basit bir resim işleme örneği
Resim işlemenin en kolay olduğu dillerden biri MATLAB'tır.
Aşağıda verilen resmin, ilk olarak renklerinin tersini alalım (inverse).
clear, clc;
girdi = imread('resim_isleme_at.jpg');
[yukseklik, genislik, renk] = size(girdi);
cikti(:, :, :) = 255 - girdi(:, :, :);
imshow(cikti, []);
İşte sonuç aşağıda:
Nasıl kolay mıymış? Peki acaba üzerine yanlışlıkla birşeyler karalanmış bir resmi düzeltebilir miyiz? Aşağıdaki resmi incelerseniz, (255,0,0) rengindeki bir kalemle karalandığını göreceksiniz.
Problemi kolay bir şekilde çözmek için, her bir nokta için, eğer karalama rengini görürsek, çevredeki karalanmamış en yakın noktaya eşitleyelim. Sonuç aşağıda!
clear, clc;
girdi = imread('resim_isleme_at_cizik.png');
[yukseklik, genislik, renk] = size(girdi);
cikti = zeros(yukseklik, genislik, renk);
sil(1, 1, :) = [255, 0, 0];
for i = 2 : yukseklik-1,
for j = 2 : genislik-1,
if girdi(i, j, :) == sil,
if girdi(i+1, j, :) ~= sil,
cikti(i, j, :) = girdi(i+1, j, :);
elseif girdi(i-1, j, :) ~= sil,
cikti(i, j, :) = girdi(i-1, j, :);
elseif girdi(i, j+1, :) ~= sil,
cikti(i, j, :) = girdi(i, j+1, :);
elseif girdi(i, j-1, :) ~= sil,
cikti(i, j, :) = girdi(i, j-1, :);
end
else
cikti(i, j, :) = girdi(i, j, :);
end
end
end
cikti = uint8(cikti);
imshow(cikti);
Ufak bir sorun olmasına rağmen, bu kadarı oldukça kolay. Dört tarafı karalanmış bir noktanın düzeltilemediğini resmi dikkatlice incelerseniz görebilirsiniz!
Peki ya daha gelişmiş bir yöntem hazırlayabilir miyiz?
- Karalama rengini bilmeden resmi düzelten! (Ani değişim noktalarını belirlemeli ve bunları çevredekilerin ortalamaları haline getirmeliyiz)
- Daha kalın karalama kalemlerini düzeltebilen! (Bu bölümleri belirleyip çevredeki karalanmamış bölgeleri bulmalıyız)
- PNG, GIF, BMP dosyalarında bu işi yapmak kolay. Peki ya JPG? (Tam olarak aradığımız rengi bulamayız --> Arama aralığı tanımlayabiliriz)
- Kod gittikçe karışıyor, ne yapalım? (Filtreleme matrisleri tanımlayarak daha anlaşılır bir şekilde kullanım sağlanabilir)
- ...
Evet, hepsi mümkün. Uğraştıktan sonra neden olmasın? :)
MATLAB image processing example (invert, fix errors, fixing scribbles, ... )