ছবিতে জেব্রা-জাতীয় প্যাটার্ন সন্ধান করা (ফটো থেকে কাঠামোগত-হালকা সীমানা কেন্দ্রের সন্ধান)


12

আমি এমন একটি প্রকল্পে কাজ করছি যেখানে একটি বিষয়ের বিরুদ্ধে সীমান্ত প্রজেক্ট করা হয় এবং একটি ফটো তোলা হয়। কাজটি হ'ল প্রান্তের কেন্দ্ররেখাগুলি সন্ধান করা, যা গাণিতিকভাবে উপস্থাপক বিমান এবং বিষয় পৃষ্ঠের মধ্যবর্তী ছেদগুলির 3 ডি বক্ররেখাকে উপস্থাপন করে।

ছবিটি একটি পিএনজি (আরজিবি), এবং প্রাক্তন প্রয়াসগুলি গ্রেজ স্কেলিং ব্যবহার করে তারপরে একটি কালো-সাদা, "জেব্রা-জাতীয়" ফটোগ্রাফি পাওয়ার জন্য থ্রোসোল্ডিংয়ের পার্থক্য করত, সেখান থেকে প্রতিটি ফ্রিঞ্জের প্রতিটি পিক্সেল কলামের মধ্য পয়েন্ট খুঁজে পাওয়া সহজ হয়েছিল। সমস্যাটি হ'ল থ্রেশহোল্ডিংয়ের মাধ্যমে এবং একটি পৃথক পিক্সেল কলামের গড় উচ্চতা গ্রহণ করে, আমরা কিছু নির্ভুল ক্ষতি এবং পরিমাণ নির্ধারণ করছি যা একেবারেই পছন্দসই নয়।

চিত্রগুলি দেখে আমার ধারণাটি হ'ল যে কেন্দ্রিয়রেখাগুলি আরও পরিবাহী (আরও বেশি পয়েন্ট) এবং স্মুথ (কোয়ান্টাইটিসড নয়) হতে পারে যদি তারা কোনও পরিসংখ্যানগত ঝাড়ু পদ্ধতিতে সরাসরি অ-চৌম্বকীয় চিত্র (আরজিবি বা গ্রেস্কেল) থেকে সনাক্ত করা হত if (কিছু বন্যা / পুনরাবৃত্তি সমঝোতা, যাই হোক না কেন)।

নীচে একটি প্রকৃত নমুনা চিত্র:

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

কোন পরামর্শ অনেক প্রশংসা হবে!


এটা অনেক মজাদার. তবে যাইহোক, আমি 3 ডি অবজেক্ট সনাক্ত করতে কালার স্ট্রাইপ ব্যবহার করে কিছু গবেষণা করছি। রঙিন স্ট্রাইপ ব্যবহার করার কারণে, প্রজেক্টরের কাছ থেকে প্রতিটি স্ট্রাইপের চিঠিপত্র খুঁজে পাওয়া সহজ। রঙ একই থাকলে আপনি কীভাবে চিঠিপত্রটি খুঁজে পাবেন? আমার ধারণা আপনার প্রকল্পটিও প্রায় 3 ডি পুনর্গঠন?

@ জোহনিউং: দয়া করে উত্তর হিসাবে মন্তব্য যুক্ত করবেন না। আমি বুঝতে পারছি আপনি মন্তব্য করার আগে আপনার খ্যাতি দরকার, তবে দয়া করে আপনার বর্তমান ক্রিয়াটি থেকে বিরত থাকুন। আমি আপনার নিজস্ব (সম্পর্কিত) প্রশ্ন জিজ্ঞাসা করার বা অন্যের প্রশ্নের উত্তর দেওয়ার পরামর্শ দিচ্ছি যাতে আপনার খ্যাতি বৃদ্ধি পায়।
পিটার কে

উত্তর দেওয়ার পরিবর্তে আরও একটি প্রশ্নের জন্য দুঃখিত, ফেজ শিফট পদ্ধতিতে আমরা প্রতিটি পিক্সেল পর্যায়ে ফেজটি গণনা করি প্রতিচ্ছবি চিত্রে, তবে এখানে কেন আমাদের কেন্দ্রীভূমিকের কেন্দ্রে সন্ধান করতে হবে, আমার প্রশ্ন হতে পারে অনেক নির্বোধ তবে আমি তা করি না না, তাই দয়া করে আমাকে সঠিক কারণটি বলুন। ইউ উত্তর দেওয়ার পরে আমার প্রশ্নটি মুছে ফেলতে পারে

এগুলি বিভিন্ন পদ্ধতি। আমি কয়েকটি সিরিজের সাদা স্ট্রাইপ (3 ডি স্পেসে "প্লেন" তৈরি করে প্রতিটি) প্রজেক্টের মাধ্যমে জ্যামিতিক প্লেনগুলির একটি সিরিজ মডেলিং করছি। সুতরাং, আমার সীমানাগুলির কেন্দ্ররেখা খুঁজে পাওয়া দরকার, কারণ বিমানগুলির কোনও বেধ নেই। অবশ্যই আমি ফেজ-শিফট বিশ্লেষণ করতে পারব, তবে একটি সমস্যা আছে: আমার প্রজেকশনটি বাইনারি (কালো এবং সাদা স্ট্রাইপগুলি পর্যায়ক্রমে) হয়, তীব্রতা sinusoidally পরিবর্তিত হয় না, এবং তাই আমি ফেজ শিফটিং সম্পাদন করতে পারি না (এবং বর্তমানে দরকার নেই) )।
হেলটনবাইকার

উত্তর:


13

আমি নিম্নলিখিত পদক্ষেপের পরামর্শ:

  1. পটভূমি থেকে অগ্রভাগটি পৃথক করতে একটি প্রান্তিক সন্ধান করুন।
  2. বাইনারি চিত্রের প্রতিটি ব্লবের জন্য (একটি জেব্রা স্ট্রাইপ), প্রত্যেকের জন্য x, ভারিত কেন্দ্রটি (পিক্সেলের তীব্রতার দ্বারা) yদিকনির্দেশটি সন্ধান করুন।
  3. সম্ভবত yশব্দগুলি অপসারণ করতে মানগুলি মসৃণ করুন ।
  4. (x,y)কিছু ধরণের বাঁক ফিট করে পয়েন্টগুলি সংযুক্ত করুন । এই নিবন্ধটি আপনাকে সাহায্য করতে পারে। আমার মতে এটির চেয়েও খারাপ হলেও আপনি একটি উচ্চ-স্তরের বহুবর্ষও ফিট করতে পারেন।

এখানে একটি মতলব কোড যা 1,2 এবং 4 পদক্ষেপ দেখায় আমি স্বয়ংক্রিয় প্রান্তিক নির্বাচন বাদ দিয়েছি। পরিবর্তে আমি ম্যানুয়ালটি বেছে নিয়েছি th=40:

এগুলি হ'ল বাঁকগুলি যা প্রতি কলামে ওজনযুক্ত গড়কে আবিষ্কার করে পাওয়া যায়: এখানে চিত্র বর্ণনা লিখুন

বহুবর্ষীয় ফিটিংয়ের পরে এগুলি বক্ররেখা: এখানে চিত্র বর্ণনা লিখুন

কোডটি এখানে:

function Zebra()
    im = imread('http://i.stack.imgur.com/m0sy7.png');
    im = uint8(mean(im,3));

    th = 40;
    imBinary = im>th;
    imBinary = imclose(imBinary,strel('disk',2));
    % figure;imshow(imBinary);
    labels = logical(imBinary);
    props =regionprops(labels,im,'Image','Area','BoundingBox');

    figure(1);imshow(im .* uint8(imBinary));
    figure(2);imshow(im .* uint8(imBinary));

    for i=1:numel(props)
        %Ignore small ones
        if props(i).Area < 10
            continue
        end
        %Find weighted centroids
        boundingBox = props(i).BoundingBox;
        ul = boundingBox(1:2)+0.5;
        wh = boundingBox(3:4);
        clipped = im( ul(2): (ul(2)+wh(2)-1), ul(1): (ul(1)+wh(1)-1) );
        imClip = double(props(i).Image) .* double(clipped);
        rows = transpose( 1:size(imClip,1) );
        %Weighted calculation
        weightedRows  = sum(bsxfun(@times, imClip, rows),1) ./ sum(imClip,1);
        %Calculate x,y
        x = ( 1:numel(weightedRows) ) + ul(1) - 1;
        y = ( weightedRows ) + ul(2) - 1;
        figure(1);
        hold on;plot(x,y,'b','LineWidth',2);
        try %#ok<TRYNC>
            figure(2);
            [xo,yo] = FitCurveByPolynom(x,y);
            hold on;plot(xo,yo,'g','LineWidth',2);
        end
        linkaxes( cell2mat(get(get(0,'Children'),'Children')) )
    end        
end

function [xo,yo] = FitCurveByPolynom(x,y)
   p = polyfit(x,y,15); 
   yo = polyval(p,x);
   xo = x;
end

আমি এইটাকে খুব মজাদার হিসেবে নেই। আমি পাইথন ব্যবহার করি তবে যাইহোক আমাকে এই সমস্ত বিষয়গুলির যুক্তি অধ্যয়ন করতে হবে। একটি স্বতন্ত্র মন্তব্য হিসাবে, আমি ক্লাসিক চিত্র প্রক্রিয়াকরণ (সরাসরি uint8 অ্যারে যেমন কোয়ান্টাইজড ইমেজ ধারক উপর) না করানোর ঝোঁক, তবে ক্রিয়াকলাপ প্রয়োগের আগে ফ্লোট অ্যারে হিসাবে মেমরিটিতে সমস্ত কিছু লোড করি। এছাড়াও, আমি আপনার চিত্রের নীচের অর্ধেকের ফলাফল নিয়ে অবাক হয়েছি, নীল রেখাগুলি প্রত্যাশিত ফ্রিঞ্জ মিডলাইনগুলি দিয়ে চলছে না ... (?)। আপাতত ধন্যবাদ, আমি কিছু ফলাফল পাওয়ার সাথে সাথে কিছু প্রতিক্রিয়া আনব!
হেলটনবাইকার

@ হেলটনবাইকার, দয়া করে আপডেট করা উত্তরটি পরীক্ষা করুন। আপনি ফ্লোটিং পয়েন্ট সম্পর্কে সঠিক, আমি এটা ব্যবহার যখন আমি রূপান্তরিত double
নিম্নার্ধের

1
@ হেলটনবাইকার, সম্পন্ন এটি আসলে 1 ভিত্তিক সূচকের সাথে সম্পর্কিত একটি বাগ ছিল।
আন্দ্রে রুবস্টেইন

Excelent! আশ্চর্যজনক, সত্যিই। এই কৌশলটি দিয়ে এবং আমার উদ্দেশ্যগুলির জন্য, স্মুথিংয়ের কেবল প্রয়োজন হবে না, তবে তা ক্ষতিকারকও হবে। আপনার আগ্রহের জন্য অনেক ধন্যবাদ!
হেলটনবাইকার

3

আমি আরজিবি চিত্রটি ব্যবহার করব না। রঙিন চিত্রগুলি সাধারণত ক্যামেরা সেন্সরে একটি "বায়ার ফিল্টার" লাগিয়ে তৈরি করা হয় , যা সাধারণত আপনি যে রেজোলিউশনটি অর্জন করতে পারেন তা হ্রাস করে।

আপনি যদি গ্রেস্কেল চিত্রটি ব্যবহার করেন তবে আমি মনে করি আপনি বর্ণিত পদক্ষেপগুলি ("জেব্রা" চিত্রটি বাইনারি করুন, মিডলাইনটি সন্ধান করুন) ভাল শুরু। চূড়ান্ত পদক্ষেপ হিসাবে, আমি চাই

  • আপনি যে মিডলাইন পেয়েছেন তাতে প্রতিটি পয়েন্ট নিন
  • উপরে এবং নীচে "জেব্রা" লাইনে পিক্সেলগুলির গ্রেভাল্যগুলি নিন
  • কমপক্ষে গড় বর্গক্ষেত্র ব্যবহার করে এই ধূসরগুলিতে একটি পরকীয়া ফিট করুন
  • এই প্যারাবোলার শীর্ষটি মধ্যলৈক অবস্থানের একটি উন্নত অনুমান

সুন্দর চিন্তা। আমি প্রতিটি পিক্সেল কলামের শীর্ষ মানগুলির সাথে এক ধরণের প্যারাবোলা বা স্প্লিন ব্যবহার করার পরিকল্পনা করছি, তবে আমি এখনও ভাবছি যে আমি পিক্সেল কলামটি বা তার পরিবর্তে লাইন বরাবর একটি পিক্সেল "অঞ্চল" পরীক্ষা করব কিনা ... আরও কিছুক্ষন অপেক্ষা করতে হবে আরও উত্তর। আপাতত ধন্যবাদ!
হেলটনবাইকার

@ হেলটনবাইকার - দ্রুত পরীক্ষা হিসাবে কেবল সবুজ চ্যানেল ব্যবহার করুন। কালার সেন্সরে সাধারণত 2x যতগুলি সবুজ পিক্সেল থাকে এবং এটি লাল এবং নীল রঙের চেয়ে কম ইন্টারপাল্টড হয়
মার্টিন বেকেট

@ মার্টিনবেকেট আপনার আগ্রহের জন্য ধন্যবাদ, আমি ইতিমধ্যে প্রতিটি চ্যানেল বিশ্লেষণ করেছি এবং প্রকৃতপক্ষে সবুজটি লাল রঙের চেয়ে অনেক বেশি সমাধান হয়েছে বলে মনে হচ্ছে। প্রতিটি চ্যানেলের জন্য উল্লম্ব ক্রস বিভাগগুলির তীব্রতা মানগুলি প্লট করা, যদিও, "স্ট্রাইপ-প্যাটার্ন" চ্যানেলের মধ্যে এত বেশি পরিবর্তিত হবে বলে মনে হয় না এবং বর্তমানে আমি গ্রেসকেলে রূপান্তর করার সময় সেগুলি সমানভাবে মিশ্রিত করছি। যদিও, এখনও আমি সেরা কনট্রাস্ট ফলাফল পেতে চ্যানেলগুলির মধ্যে সেরা লিনিয়ার সংমিশ্রণটি অধ্যয়ন করার পরিকল্পনা করছি বা ইতিমধ্যে গ্রেস্কেলের চিত্রগুলি অর্জন করতে পারি। আবার ধন্যবাদ!
হেলটনবাইকার

3

আপনার প্রশ্নের 'পাথ অপটিমাইজেশন সমস্যা' হিসাবে মডেলিং করে এখানে আপনার সমস্যার বিকল্প সমাধান। যদিও এটি সাধারণ বাইনারিাইজেশন এবং তারপরে কার্ভিফিটিং সমাধানের চেয়ে জটিল তবে এটি অনুশীলনে আরও দৃust়।

খুব উচ্চ স্তর থেকে, আমাদের এই চিত্রটি গ্রাফ হিসাবে বিবেচনা করা উচিত, যেখানে

  1. প্রতিটি চিত্র পিক্সেল এই গ্রাফ একটি নোড

  2. প্রতিটি নোড কিছু অন্যান্য নোডের সাথে সংযুক্ত থাকে, যা প্রতিবেশী হিসাবে পরিচিত, এবং এই সংযোগ সংজ্ঞাটি প্রায়শই এই গ্রাফের টপোলজি হিসাবে উল্লেখ করা হয়।

  3. প্রতিটি নোডের একটি ওজন রয়েছে (বৈশিষ্ট্য, ব্যয়, শক্তি, বা আপনি যেটাকে কল করতে চান), এটি প্রত্যাশা করে যে এই নোডটি একটি অনুকূল কেন্দ্রীয়-লাইনে আমরা খুঁজছি।

যতক্ষণ আমরা এই সম্ভাবনাটি মডেল করতে পারি, ততক্ষণ আপনার 'সীমান্তের কেন্দ্ররেখাগুলি' সন্ধানের সমস্যাটি গ্রাফের স্থানীয় অনুকূল পাথগুলি খুঁজে পেতে সমস্যা হয়ে দাঁড়ায় , যা কার্যকরভাবে ডায়নামিক প্রোগ্রামিং দ্বারা সমাধান করা যায়, যেমন ভিটার্বি অ্যালগরিদম।

এই পদ্ধতির অবলম্বন করার কয়েকটি কৌশল এখানে রয়েছে:

  1. আপনার সমস্ত ফলাফল অবিচ্ছিন্ন থাকবে (প্রান্তিক পদ্ধতির বিপরীতে যা একটি কেন্দ্রের লাইনকে টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরা টুকরো

  2. যেমন একটি গ্রাফ নির্মাণ করতে অনেক স্বাধীনতা, আপনি বিভিন্ন বৈশিষ্ট্য এবং গ্রাফ টপোলজি নির্বাচন করতে পারেন।

  3. আপনার ফলাফলগুলি পাথ অপ্টিমাইজেশনের অর্থে অনুকূল

  4. আপনার সমাধান শব্দের বিরুদ্ধে আরও দৃ be় হবে, যতক্ষণ না শব্দ যতক্ষণ না সমস্ত পিক্সেলের মধ্যে সমানভাবে বিতরণ করা যায়, সেই অনুকূল পথগুলি স্থিতিশীল থাকে।

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

অস্পষ্ট সমাপ্তির জন্য, এটি প্রতিটি সম্ভাব্য শেষ নোডের জন্য সর্বোত্তম পথের সন্ধানের কারণে ঘটে is ফলস্বরূপ, যদিও অন্ধকার অঞ্চলে অবস্থিত কয়েকটি নোডের জন্য, হাইলাইট করা পথটি এখনও এটির স্থানীয় অনুকূল।

অস্পষ্ট পথের জন্য আপনি এটি সন্ধানের পরে এটি মসৃণ করতে পারবেন বা কাঁচা তীব্রতার পরিবর্তে কিছু স্মুথড বৈশিষ্ট্য ব্যবহার করতে পারেন।

শুরু এবং শেষ নোডগুলি পরিবর্তন করে আংশিক পাথগুলি পুনরুদ্ধার করা সম্ভব।

এই অনাকাঙ্ক্ষিত স্থানীয় অনুকূল পাথগুলি ছাঁটাই করা কঠিন হবে না। কারণ আমাদের মধ্যে ভিটারবি ডিকোডিংয়ের পরে সমস্ত পাথের সম্ভাবনা রয়েছে এবং আপনি বিভিন্ন পূর্ববর্তী জ্ঞান ব্যবহার করতে পারেন (যেমন আমরা দেখতে পাই এটি সত্য যে একই উত্সটি ভাগ করে নেওয়ার জন্য আমাদের কেবল একটি সর্বোত্তম পথ প্রয়োজন))

আরও তথ্যের জন্য, আপনি কাগজ উল্লেখ করতে পারেন।

 Wu, Y.; Zha, S.; Cao, H.; Liu, D., & Natarajan, P.  (2014, February). A Markov Chain Line Segmentation Method for Text Recognition. In IS&T/SPIE 26th Annual Symposium on Electronic Imaging (DRR), pp. 90210C-90210C.

উপরের গ্রাফটি তৈরি করতে পাইথন কোডের একটি সংক্ষিপ্ত অংশ রয়েছে।


import cv2
import numpy as np
from matplotlib import pyplot
# define your image path
image_path = ;
# read in an image
img = cv2.imread( image_path, 0 );
rgb = cv2.imread( image_path, -1 );

# some feature to reflect how likely a node is in an optimal path
img = cv2.equalizeHist( img ); # equalization
img = img - img.mean(); # substract DC
img_pmax = img.max(); # get brightest intensity
img_nmin = img.min(); # get darkest intensity
# express our preknowledge
img[ img > 0 ] *= +1.0  / img_pmax; 
img[ img = 1 :
    prev_idx = vt_path[ -1 ].astype('int');
    vt_path.append( path_buffer[ prev_idx, time ] );
    time -= 1;
vt_path.reverse();    
vt_path = np.asarray( vt_path ).T;

# plot found optimal paths for every 7 of them
pyplot.imshow( rgb, 'jet' ),
for row in range( 0, h, 7 ) :
    pyplot.hold(True), pyplot.plot( vt_path[row,:], c=np.random.rand(3,1), lw = 2 );
pyplot.xlim( ( 0, w ) );
pyplot.ylim( ( h, 0 ) );

এটি একটি খুব আকর্ষণীয় পদ্ধতির। আমি স্বীকার করি "গ্রাফগুলি" বিষয়টি আমার কাছে খুব শীঘ্রই অস্পষ্ট ছিল যখন (এই একই প্রকল্পে) আমি কেবল গ্রাফগুলি ব্যবহার করে অন্য একটি সমস্যার সমাধান করতে পারি। আমি "এটি পেয়েছিলাম" পরে, আমি বুঝতে পারি এই সংক্ষিপ্ততম পথগুলি অ্যালগরিদমগুলি কতটা শক্তিশালী হতে পারে। আপনার ধারণাটি খুব আকর্ষণীয় এবং এটি আমার পক্ষে প্রয়োজন / অপারেশন থাকলে আমি এইটির জন্য পুনরায় প্রতিস্থাপন করব এটি অসম্ভব নয়। আপনাকে অনেক ধন্যবাদ.
হেলটনবাইকার

আপনার বর্তমান ফলাফল হিসাবে, আমার অভিজ্ঞতা থেকে গ্রাফটি তৈরির আগে চিত্রটি গাউসিয়ান এবং / বা মিডিয়ান ফিল্টার দিয়ে প্রথমে মসৃণ করা ভাল। এটি অনেক মসৃণ (এবং আরও সঠিক) লাইন দেবে। এছাড়াও, একটি সম্ভাব্য কৌশল হ'ল দুই বা ততোধিক পিক্সেল (একটি নির্দিষ্ট সীমা পর্যন্ত, 8 বা 10 পিক্সেল পর্যন্ত) "সরাসরি জাম্পিং" করার অনুমতি দেওয়ার জন্য পাড়াটি বাড়ানো। অবশ্যই একটি উপযুক্ত ব্যয় ফাংশন বেছে নেওয়া উচিত, তবে আমি মনে করি এটি টিউন করা সহজ।
হেলটনবাইকার

হ্যাঁ. আমি কেবল হাতে কিছু বাছাই করেছি, আপনি অবশ্যই অন্যান্য টপোলজি এবং শক্তি ফাংশন ব্যবহার করতে পারেন। আসলে, এই কাঠামোটিও প্রশিক্ষণযোগ্য। বিশেষত, আপনি কাঁচা তীব্রতা দিয়ে শুরু করেন, অনুকূল পাথের জন্য ডিকোড করুন, কেবলমাত্র উচ্চ আত্মবিশ্বাসের সাথে সেই অনুকূল নোডগুলি বেছে নিন এবং এইভাবে আপনি 'লেবেলযুক্ত ডেটা' পান। স্বয়ংক্রিয়ভাবে লেবেল করা তথ্যের এই ছোট্ট অংশের সাহায্যে আপনি অনেক ধরণের দরকারী জিনিস শিখতে পারেন।
ফাঁদ

3

ভেবেছিলাম আমার উত্তরটি পোস্ট করা উচিত কারণ এটি অন্যান্য পদ্ধতির থেকে কিছুটা আলাদা। আমি মতলব এ চেষ্টা করেছিলাম।

  • সমস্ত চ্যানেল যোগ করুন এবং একটি চিত্র তৈরি করুন, যাতে সমস্ত চ্যানেল সমানভাবে ওজনযুক্ত হয়
  • এই চিত্রটিতে রূপক সমাপনীকরণ এবং গাউসিয়ান ফিল্টারিং সম্পাদন করুন
  • ফলাফলের প্রতিচ্ছবিটির প্রতিটি কলামের জন্য স্থানীয় ম্যাক্সিমা সন্ধান করুন এবং একটি চিত্র তৈরি করুন
  • এই চিত্রের সংযুক্ত উপাদানগুলি সন্ধান করুন

আমি এখানে একটি অসুবিধা দেখতে পাচ্ছি যে এই পদ্ধতিটি স্ট্রাইপের কিছু দিকনির্দেশের জন্য ভাল সম্পাদন করবে না। সেক্ষেত্রে আমাদের এর দিকনির্দেশনা সংশোধন করতে হবে এবং এই পদ্ধতিটি প্রয়োগ করতে হবে।

মতলব কোডটি এখানে:

im = imread('m0sy7.png');
imsum = sum(im, 3); % sum all channels
h = fspecial('gaussian', 3);
im2 = imclose(imsum, ones(3)); % close
im2 = imfilter(im2, h); % smooth
% for each column, find regional max
mx = zeros(size(im2));
for c = 1:size(im2, 2)
    mx(:, c) = imregionalmax(im2(:, c));
end
% find connected components
ccomp = bwlabel(mx);

উদাহরণস্বরূপ, আপনি যদি ইমেজটির মাঝামাঝি কলামটি নেন তবে এর প্রোফাইলটি দেখতে এই জাতীয় হওয়া উচিত: (নীল রঙে প্রোফাইল। সবুজ রঙে স্থানীয় ম্যাক্সিমায়া রয়েছে) মিড প্রোফাইল এবং স্থানীয় ম্যাক্সিমা

এবং সমস্ত কলামের জন্য স্থানীয় ম্যাক্সিমাযুক্ত চিত্রটি দেখতে এরকম দেখাচ্ছে: এখানে চিত্র বর্ণনা লিখুন

এখানে সংযুক্ত উপাদানগুলি রয়েছে (যদিও কিছু স্ট্রাইপগুলি ভেঙে গেছে, তাদের বেশিরভাগই একটি ধারাবাহিক অঞ্চল পায়):

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


এটি এখন আমরা যা করছি, কেবলমাত্র প্রতিটি পিক্সেল কলামের জন্য স্থানীয় ম্যাক্সিমাকে কীভাবে সন্ধান করতে হবে তার একমাত্র তফাত সহ: আমরা সর্বোচ্চ পন্য এবং তার উপরের এবং নীচের প্রতিবেশীদের সাথে পিক্সেলটির মধ্য দিয়ে পার্বোবোলার সঠিক ভার্টেক্সটি খুঁজে পেতে একটি প্যারাবোলিক ইন্টারপোলেশন ব্যবহার করি । এটি ফলাফলকে "মধ্যবর্তী" পিক্সেলের জন্য অনুমতি দেয় যা লাইনগুলির সূক্ষ্ম মসৃণতার আরও ভালভাবে প্রতিনিধিত্ব করে। আপনার উত্তরের জন্য ধন্যবাদ!
হেলটনবাইকার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.