Image Thresholding / Pengambangan Citra

Dua nilai tingkat keabuan yaitu hitam dan putih. Secara umum proses pengambangan citra grayscale untuk menghasilkan citra biner adalah sebagai berikut.


g(x,y) adalah citra biner dari citra grayscale
f(x,y), dan T menyatakan nilai ambang. Nilai T memegang peranan yang sangat penting dalam proses pengambangan. Kualitas hasil citra biner sangat tergantung pada nilai T yang digunakan.

Metode Otsu
Metode Otsu menghitung nilai ambang T secara otomatis berdasarkan citra masukan. Pendekatan yang digunakan oleh metode Otsu adalah dengan melakukan analisis diskriminan yaitu menentukan suatu variabel yang dapat membedakan antara dua atau lebih kelompok yang muncul secara alami. Analisis Diskriminan akan memaksimumkan variabel tersebut agar dapat memisahkan objek dengan latar belakang.
Misalkan nilai ambang yang akan dicari dinyatakan dengan k. Nilai k berkisar antara 1 sampai dengan L, dengan L = 255. Probabilitas untuk piksel i dinyatakan dengan :



dengan ni menyatakan jumlah piksel dengan tingkat keabuan I, dan N menyatakan banyaknya piksel pada citra.
Nilai momen kumulatif ke-nol, momen kumulatif ke-satu, dan nilai rata-rata
berturut-turut dapat dinyatakan sebagai berikut :




Nilai ambang k dapat ditentukan dengan memaksimumkan persamaan:

dengan


Berikut Source Code Delphi Thresholding Otsu :


procedure TEnrollForm.Threshold(Image:TBitmap);
const level=255;
var
histogram: array[0..255] of integer;
PH: PByteArray;
TotalMean, Variance, maxVariance, zerothCumuMoment, firstCumuMoment : real;
i,j,k: integer;
p: PByteArray;
threshold:byte;
area: Word;

begin
for i:=0 to level do
begin
histogram[i]:=0;
end;
for i:=0 to Image.Height-1 do
begin
PH:=Image.ScanLine[i];
for j:= 0 to Image.Width-1 do
begin
inc(histogram[PH[3*j]]);
end;
end;

//compute otsu method
threshold:=0;
totalMean := 0;
maxVariance := 0;
firstCumuMoment := 0;
zerothCumuMoment := 0;
area := Image.Height * Image.Width;

for k:= 0 to level do
TotalMean := TotalMean + (k * histogram[k] / area);

for k:= 0 to level do
begin
zerothCumuMoment := zerothCumuMoment + histogram[k] / area;
firstCumuMoment := firstCumuMoment + (k * histogram[k] / area);
variance := totalMean * zerothCumuMoment - firstCumuMoment;
variance := variance * variance;

if ((zerothCumuMoment <> 0) and (zerothCumuMoment <> 1)) then
begin
variance := variance /(zerothCumuMoment * (1 - zerothCumuMoment));

if (maxVariance < variance) then
begin
maxVariance := variance;
threshold := k;
end;
end;
end;

for i:=0 to Image.Height-1 do begin
p:= Image.ScanLine[i];
for j:=0 to Image.Width-1 do begin
for k:=0 to 2 do
if (p[3*j])and (p[3*j+1]) and (p[3*j+2])>threshold then
p[3*j+k]:= 255
else
p[3*j+k]:= 0;
end;
end;
ImgThres.Picture.Bitmap:=Image;
end;

Komentar FB


Probably Related Article



9 comments:

free css templates said...
March 28, 2009 at 8:43 AM

Hey you got a wonderful covering interesting article written in simple understanding language. I have bookmarked your blog for my future use.

Poetra Mahardika said...
March 31, 2009 at 10:27 PM

Wuuiiiihh si Bro ahli bgt dalam rumus2 niehh.. Mantaaaap bro, aku udah lupa semua rumus2 waktu kuliah.. Hehehehe..

picas said...
April 1, 2009 at 3:55 PM

Itu sudah ada algoritmanya.. sebenarnya tinggal ngikut aja...

abhan said...
April 3, 2009 at 2:53 AM

bingung juga yach rumusnya...!!!
ngak sanggup dach.

picas said...
April 3, 2009 at 3:08 AM

aq cmn ngikut2 algoritmanya aja..itu sudah dipatenkan dengan nama OTSU Thresholding

melyarra said...
April 14, 2009 at 2:01 AM

metode otsu dalam delphi
kalau dengan visual basic bagaimana???

picas said...
April 28, 2009 at 11:44 PM

bisa kalau bisa konversi source code itu..yg di delphi itu jg saya konversi dari c++

kyknya cm perlu dicoba saja..pasti bisa..

Pest Control Toronto said...
August 22, 2010 at 2:35 AM

Its really a very informative article indeed. I have learn a lot from your post. I am going to practice it. Thanks for sharing such valuable stuff with us.

Vehicle Tracking said...
January 28, 2011 at 10:49 PM

Hy ...congrats for the informative post .I'm really happy I found it on googleKeep up the great work because I for sure will visit for updates

Related Posts by Categories



Widget by