এই উদাহরণে ডকুমেন্ট ইমেজ থ্রোহোল্ডিংয়ের জন্য সেরা অ্যালগরিদমগুলি কী কী?


31

আমি প্রদর্শিত চিত্রটিতে বিভিন্ন বাইনারিકરણ অ্যালগরিদমগুলি প্রয়োগ করার চেষ্টা করছি: এখানে চিত্র বর্ণনা লিখুন

কোডটি এখানে:

clc;
clear;
x=imread('n2.jpg');     %load original image

% এখন আমরা চিত্রগুলি পুনরায় আকার দিন যাতে কম্পিউটারের কাজ আমাদের জন্য পরে আরও সহজ হয়ে যায়।

size(x);
x=imresize(x,[500 800]);
figure;
imshow(x);
title('original image');

z=rgb2hsv(x);       %extract the value part of hsv plane
v=z(:,:,3);
v=imadjust(v);

% এখন আমরা নিব্ল্যাক এবং% সওভোলা অ্যালগরিদমের জন্য প্রয়োজনীয় গড় এবং মানক বিচ্যুতি খুঁজে পাই

m = mean(v(:))
s=std(v(:))
k=-.4;
value=m+ k*s;
temp=v;

% নিবলাক থ্রোহোল্ডিং অ্যালগোরিদম প্রয়োগ করছে:

for p=1:1:500
    for q=1:1:800
        pixel=temp(p,q);
        if(pixel>value)
            temp(p,q)=1;
        else
            temp(p,q)=0;
        end
    end
end
figure;
imshow(temp);
title('result by niblack');
k=kittlerMet(g);
figure;
imshow(k);
title('result by kittlerMet');

% সাভোলা থ্রোহোল্ডিং অ্যালগরিদম বাস্তবায়ন করছে:

val2=m*(1+.1*((s/128)-1));
t2=v;
for p=1:1:500
for q=1:1:800
    pixel=t2(p,q);
    if(pixel>value)
        t2(p,q)=1;
    else
        t2(p,q)=0;
    end
end

শেষ

figure;
imshow(t2);
title('result by sauvola');

আমি প্রাপ্ত ফলাফলগুলি দেখানো হয়েছে: এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন ফলস চিত্রগুলি গা dark় দাগগুলিতে অবনমিত হয় someone


1
রঙিন তথ্য আপনি কেবল উজ্জ্বলতার পরিবর্তে পটভূমি ফেলে দিতে ব্যবহার করতে পারেন?
এন্ডোলিথ

শ্রদ্ধেয় স্যার / ম্যাডাম। আমি ইমেজ প্রসেসিংয়ে প্রকল্প করছি doing আমি আকর্ষণীয় বাইনারিাইজেশন কনসেপ্ট করছি ... দয়া করে কোডিং পরীক্ষা করুন এবং সংশোধন করুন ... আমি কোডিং নিয়ে প্রোগ্রামটি চালাচ্ছি। তবে এই কোডিংটিতে কিছু ত্রুটি ঘটেছে ... অপরিজ্ঞাত ফাংশন বা ভেরিয়েবল 'জি'। এবং অন্যটি হ'ল এমএসপিতে ত্রুটি (লাইন 31) কে = কিটেলমিট (জি); .. এটি কীভাবে সমাধান করবেন ... দয়া করে কোডিংটি সংশোধন করুন ...
মুঠু

উত্তর:


49

আপনার ছবিতে অভিন্ন উজ্জ্বলতা নেই, তাই আপনার অভিন্ন চৌম্বকটি নিয়ে কাজ করা উচিত নয়। আপনার একটি অভিযোজিত প্রান্তিকর প্রয়োজন। এই চিত্রটি জুড়ে উজ্জ্বলতাটিকে আরও অভিন্ন করার জন্য চিত্রটিকে প্রাক-প্রসেসিংয়ের মাধ্যমে প্রয়োগ করা যেতে পারে (ম্যাথমেটিকায় রচিত কোড, আপনার নিজের জন্য মতলব সংস্করণটি প্রয়োগ করতে হবে):

উজ্জ্বলতা অভিন্ন করার একটি সহজ উপায় হ'ল একটি ক্লোজিং ফিল্টার ব্যবহার করে চিত্র থেকে আসল পাঠ্য সরিয়ে ফেলা:

white = Closing[src, DiskMatrix[5]]

এখানে চিত্র বর্ণনা লিখুন

ফিল্টার আকার ফন্ট স্ট্রোক প্রস্থের চেয়ে বড় এবং আপনি মুছে ফেলার চেষ্টা করছেন দাগের আকারের চেয়ে ছোট চয়ন করা উচিত।

সম্পাদনা: ক্লোজিং অপারেশন কী করে তা ব্যাখ্যা করার জন্য আমাকে মন্তব্যে জিজ্ঞাসা করা হয়েছিল। এটা একটা ব্যাপার অঙ্গসংস্থান প্রসারণ একটি দ্বারা অনুসরণ অঙ্গসংস্থান ক্ষয় । বিচ্ছিন্নতাটি মূলত চিত্রের প্রতিটি অবস্থানে কাঠামোগত উপাদানকে সরিয়ে দেয় এবং মুখোশের নীচে সবচেয়ে উজ্জ্বল পিক্সেলটি তুলে ধরে:

  • কাঠামোগত উপাদানগুলির চেয়ে ছোট গা dark় কাঠামো অপসারণ
  • কাঠামোগত উপাদানগুলির আকারের দ্বারা বৃহত্তর গা dark় কাঠামো সঙ্কুচিত করা
  • উজ্জ্বল কাঠামো বিস্তৃত

ক্ষয়ের ক্রিয়াটি বিপরীতভাবে কাজ করে (এটি স্ট্রাকচারিং উপাদানের অভ্যন্তরে অন্ধকারতম পিক্সেলটি তোলে), তাই আপনি যদি এটি বিচ্ছুরিত চিত্রটিতে প্রয়োগ করেন:

  • গা the় কাঠামোগুলি সরানো হয়েছিল কারণ তারা কাঠামোগত উপাদানগুলির চেয়ে ছোট তাই এখনও গেছে
  • সঙ্কুচিত হওয়া গা structures় কাঠামোগুলি আবার তাদের মূল আকারে বাড়ানো হয়েছে (যদিও তাদের আকৃতিটি মসৃণ হবে)
  • উজ্জ্বল স্ট্রাকচারগুলি তাদের মূল আকারে হ্রাস পেয়েছে

সুতরাং সমাপ্তির ক্রিয়াটি বড় অন্ধকার বস্তু এবং উজ্জ্বল অবজেক্টগুলিতে কেবলমাত্র ছোটখাটো পরিবর্তন সহ ছোট অন্ধকার বস্তুকে সরিয়ে দেয়।

বিভিন্ন কাঠামোগত উপাদান মাপের একটি উদাহরণ এখানে:

এখানে চিত্র বর্ণনা লিখুন

কাঠামোগত উপাদানের আকার বাড়ার সাথে সাথে আরও অনেকগুলি অক্ষর মুছে ফেলা হবে। ব্যাসার্ধ = 5 এ, সমস্ত অক্ষর মুছে ফেলা হয়েছে। ব্যাসার্ধটি আরও বাড়ানো থাকলে, ছোট ছোট দাগগুলিও সরানো হয়:

এখানে চিত্র বর্ণনা লিখুন

এখন আপনি প্রায় (প্রায়) অভিন্ন উজ্জ্বলতার চিত্র পেতে এই "সাদা চিত্র" দ্বারা মূল চিত্রটি ভাগ করুন:

whiteAdjusted = Image[ImageData[src]/ImageData[white]*0.85]

এখানে চিত্র বর্ণনা লিখুন

এই চিত্রটি এখন ধ্রুবক দোরগোড়ায় বাইনারি করা যেতে পারে:

Binarize[whiteAdjusted , 0.6]

এখানে চিত্র বর্ণনা লিখুন


5
কি দারুন! এটা সত্যিই দুর্দান্ত! বিশাল +1!
ফোনন

@ নিকি +1 খুব সুন্দর - ফিল্টার বন্ধ করে ঠিক কী বোঝাতে চান "ফন্ট স্ট্রোকের চেয়ে বড় চয়ন করা উচিত"? কোনও চিঠির প্রস্থ বা দৈর্ঘ্য? তদুপরি, একটি বন্ধ ফিল্টার 'সত্যই' কী করছে? ধন্যবাদ!
স্পেসি

1
@ মোহাম্মদ: আমি আমার উত্তরে কিছুটা ব্যাখ্যা যুক্ত করেছি। এবং হ্যাঁ, এগুলি অ-রৈখিক ক্রিয়াকলাপ। সাধারণ শিরোনামটি রূপচর্চা চিত্র প্রক্রিয়াকরণ।
নিকি এস্টনার

1
@ নিকি কিছু মনে করবেন না, সাদা সর্বাধিক, কালো নয়। :-)
স্পেসি

1
@ জিডিএলফিনো: আমি সাধারণত এটি যথেষ্ট পরিমাণে একটি মাস্ক ব্যবহার করে এড়াতে চেষ্টা করি এবং Clip[ImageData[white],{eps,Infinity}]নিরাপদ থাকার জন্য যেখানে ইপিএস খুব কম সংখ্যক সেখানে ব্যবহার করি ।
নিকি এস্টনার

6

নিকির উত্তরটি সেরা বলে মনে হচ্ছে এবং এটি কাজ করে ফলাফল প্রকাশ করেছে বলে মনে হয়। সুতরাং এটি একটি পরিষ্কার বিজয়ী।

তবে, ডকুমেন্টেশনে আমি আরও একটি রেফারেন্স যুক্ত করছি, এটি খুব দ্রুত হতে পারে।

এই কৌশলটিকে অ্যাডাপটিভ থ্রেশহোল্ডিং বলা হয় যার ব্যাকগ্রাউন্ডটি স্পষ্টভাবে শেখার প্রয়োজন হয় না ।

মূলত, সর্বাধিক উপযুক্ত বৈশ্বিক প্রান্তিক সন্ধানের পরিবর্তে - আমরা স্থানীয় উইন্ডোতে চিত্রটি বিভাজন করতে পারি (প্রায় 7x7 বা যথাযথ বলুন) এবং উইন্ডোটি ট্রান্সওয়ার্স হিসাবে পরিবর্তিত প্রান্তিকতাগুলি খুঁজে পেতে পারি।

নীচের রেফারেন্স সঠিক পদ্ধতি বিশদ। http://homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm

এই পদ্ধতিটি তুলনামূলকভাবে গতিতে দ্রুত হবে।


এই দুটি জিনিস মূলত এক নয়? থ্রোহোল্ডিংয়ের পূর্বে সিগন্যালের স্থানীয় গড় অনুমান করা?
মরিটস

1
@ মউরিটস দেখে মনে হচ্ছে মূল পার্থক্য হ'ল ক্রম এবং ব্যবহৃত পরিসংখ্যান। উদাহরণস্বরূপ, খোলার / সমাপনী অপারেটরগুলিতে (যেগুলি বিসারণ এবং ক্ষয় দিয়ে তৈরি হয় তবে একটি ভিন্ন ক্রমে) একটি উইন্ডো রাস্টার স্ক্যান করে সর্বাধিক নেওয়া হয়। (অন্যান্য বিষয়ের মধ্যে). তবে অভিযোজিত প্রান্তিক ক্ষেত্রে গড় / মধ্যকটি সর্বাধিকের পরিবর্তে নেওয়া যেতে পারে।
স্পেসি

ওপি এসও-তেও এটি জিজ্ঞাসা করেছিল , যা আমি উত্তর দিয়েছি। তবে নীতিগতভাবে, আমি মনে করি না যে উত্তরগুলির মধ্যে কোনও পার্থক্য আছে, একজন সর্বদা স্থানীয় পরিসংখ্যান অনুমান করে। আপনি যদি অভিযোজিত থ্রেশহোল্ডিং করেন তবে আপনি প্রক্রিয়াটির পটভূমিও শিখবেন।
মরিটস

6

ব্যান্ডপাস ফিল্টার ব্যবহারের অন্য উপায় (এমএটিএলবিতে)। গাউসিয়ান প্যারামিটারগুলির পার্থক্য নিয়ে প্রায় খেলে আরও ভাল ফলাফল হতে পারে। প্রক্রিয়াটি মূলত ব্যান্ডপাসটি কম ফ্রিকোয়েন্সি ব্যাকগ্রাউন্ড ব্লবগুলি সরিয়ে ছবিটি ফিল্টার করে, 'গ্রেথ্রেশ' কমান্ড, প্রান্তিক চিত্রের জন্য প্রয়োজনীয় [0,1] এ স্বাভাবিক করুন।

চিত্র লোড করুন এবং গ্রেস্কেল ডাবল রূপান্তর করুন:

I = imread('hw.jpg');
I = rgb2gray(I);
I = double(I);

এখানে চিত্র বর্ণনা লিখুন

গাউসিয়ান কার্নেলের পার্থক্য ব্যবহার করে ফিল্টার করুন এবং স্বাভাবিক করুন:

J = imgaussian(I,1.5) - imgaussian(I,0.5);
J = J - min(J(:));
J = J / max(J(:));

এখানে চিত্র বর্ণনা লিখুন

থ্রেশহোল্ড গণনা করুন এবং 010101 করুন:

T = J > graythresh(J);

এখানে চিত্র বর্ণনা লিখুন


4

এটি অভিযোজিত থ্রেশহোল্ডিংয়ের জন্য একটি ভাল ম্যাটলব কোড: http://www.mathworks.com/matlabcentral/fileexchange/8647-local-adaptive-thresholding


আহা! যদিও ইমেজ প্রসেসিং টুলবক্স প্রয়োজন। : - /
স্পেসি

প্রকৃতপক্ষে. না থাকলে দুঃখিত। তবে ডিআইপিআইমেজ মাতলাবের জন্য একটি নিখরচায় টোলবক্স। ডিপলিব.অর্গ / ডকুমেন্টেশন এটি থ্রোসোল্ডিংয়ের জন্য কয়েকটি পদ্ধতি রয়েছে (বিভাগটি বিভাগে পরীক্ষা করুন) এবং আপনি বন্ধের মতো সমস্ত রূপক ক্রিয়াকলাপও করতে পারেন। বিকাশকারীর একটি ব্লগও রয়েছে cb.uu.se/~cris/blog/index.php/archives/tag/matlab
মাইকার্তা

0

আমি এই কোডিংটি চেষ্টা করব i তবে আমার কাছে সঠিক উত্তর নেই ...

clc;
clear;
x=imread('base2.jpg');
size(x);
x=imresize(x,[500 800]);
figure;
imshow(x);
title('original image');
z=rgb2hsv(x);       %extract the value part of hsv plane
v=z(:,:,3);
v=imadjust(v);
m = mean(v(:))
s=std(v(:))
k=-2;
value=m+ k*s;
temp=v;
for p=1:1:500
    for q=1:1:800
        pixel=temp(p,q);
        if(pixel>value)
            temp(p,q)=1;
        else
            temp(p,q)=0;
        end
    end
end
figure;
imshow(temp);
title('result by niblack');
% k=kittlerMet(g);
% figure;
% imshow(k);
% title('result by kittlerMet');

val2=m*(1+.1*((s/128)-1));
t2=v;
for p=1:1:500
for q=1:1:800
    pixel=t2(p,q);
    if(pixel>value)
        t2(p,q)=1;
    else
        t2(p,q)=0;
    end
end

end
figure;
imshow(t2);
title('result by sauvola');

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


2
যদি এই প্রশ্নের উত্তর বোঝানো হয় তবে দয়া করে আপনি কী করছেন এবং কেন তা ব্যাখ্যা করুন।
ম্যাট এল।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.