কোন রাস্টার স্মুথিং / জেনারালাইজেশন সরঞ্জামগুলি উপলব্ধ?


46

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

আমি যে কোনও সরঞ্জাম বা পদ্ধতি ব্যবহার করতে পারি (এসরি, জিডিএল, গ্রাস উপর ভিত্তি করে)? আমার নিজের গাউসিয়ান ব্লার রুটিনটি ঘরে বেক করা দরকার ? আমি কি লো-পাস ফিল্টার ব্যবহার করতে পারি (উদাঃ আরকজিআইএসের ফিল্টার ), এবং যদি তাই হয় তবে বড় ব্যাসার্ধের প্রভাব পেতে আমার এটি কয়েকবার চালানো দরকার?


কেবলমাত্র একটি বড় কক্ষের আকারে রাস্টার রফতানি সম্পর্কে কী? এর ফলে কি চূড়ান্ততার নিঃশব্দ হয়ে উঠতে পারে?

1
হ্যাঁ, এটি চূড়ান্ততাও হ্রাস করবে (ধরে নিই যে অন্তর্নিহিত পুনর্নির্মাণের গড়পড়তা কিছু ফর্ম জড়িত) তবে এটি একটি ডেমকে মসৃণ করার একটি ভয়ঙ্কর উপায় : আপনি সংখ্যক বড় ব্লক তৈরি করবেন। বিটিডাব্লু, সাধারণত এটি করার জন্য একজনকে রাস্টার রফতানি করার প্রয়োজন হয় না; অ্যাগ্রিগেশন সেইসাথে রীস্যাম্পেলিং একটি ভিন্ন cellsize প্রাথমিক অপারেশন সাধারণত রাস্টার ভিত্তিক সফ্টওয়্যার পাওয়া যায়।
whuber

উত্তর:


29

গাউসিয়ান অস্পষ্টতা কেবল একটি ওজনযুক্ত কেন্দ্রবিন্দু। আপনি স্বল্প-দূরত্বের বিজ্ঞপ্তি পাড়া (অপরিচ্ছন্ন) এর ক্রম সহ উচ্চ নির্ভুলতায় এটি পুনরায় তৈরি করতে পারেন: এটি কেন্দ্রীয় সীমাবদ্ধ তত্ত্বের একটি প্রয়োগ ।

আপনার অনেক পছন্দ আছে। "ফিল্টার" খুব সীমাবদ্ধ - এটি কেবল 3 x 3 পাড়ার জন্য - সুতরাং এটি নিয়ে বিরক্ত করবেন না। বড় ডিইএমগুলির জন্য সর্বোত্তম বিকল্প হ'ল আর্কজিআইএসের বাইরের গণনাটিকে এমন পরিবেশে নিয়ে যাওয়া যা ফাস্ট ফুরিয়ার ট্রান্সফর্ম ব্যবহার করে: তারা একই ফোকাল গণনা করে তবে (তুলনায়) তারা এটি নির্মোহভাবে দ্রুত করে। (গ্রাসের একটি এফএফটি মডিউল রয়েছে It's এটি চিত্র প্রক্রিয়াজাতকরণের জন্য উদ্দেশ্যে করা হয়েছে তবে আপনি যদি 0 25 255 রেঞ্জের মধ্যে যুক্তিসঙ্গত নির্ভুলতার সাথে এটিকে পুনরুদ্ধার করতে পারেন তবে আপনি এটি আপনার ডিইএমের পরিষেবাতে চাপতে সক্ষম হতে পারেন)) এটি বাদ দিয়ে কমপক্ষে দুটি সমাধান হ'ল অস্ত্রোপচার:

  1. বিশাল আকারের প্রতিবেশীর জন্য গাউসিয়ান ব্লারটিকে প্রায় অনুমান করার জন্য প্রতিবেশী ওজনের একটি সেট তৈরি করুন। আপনার মসৃণ ডিএমগুলির ক্রম তৈরি করতে এই অস্পষ্টতার ধারাবাহিক পাসগুলি ব্যবহার করুন।

    (ওজনকে exp (-d ^ 2 / (2r)) হিসাবে গণনা করা হয় যেখানে d দূরত্ব (আপনার পছন্দমতো কোষে) এবং r কার্যকর ব্যাসার্ধ (কোষেও) থাকে They এগুলি প্রসারিত বৃত্তের মধ্যে গণনা করতে হবে where আউট অন্তত করতে 3R । আমরা খুব সহজেই, তাই শেষে তাদের সবাইকে এর সমষ্টি দ্বারা প্রতিটি ওজন ভাগ তারা 1. সমষ্টি)

  2. বিকল্পভাবে, ওজন ভুলে যান; শুধু বারবার একটি বৃত্তাকার কেন্দ্রবিন্দু চালান। ডেমের রেজোলিউশনের সাহায্যে উত্পন্ন গ্রিডগুলি (slাল এবং দিকের মতো) কীভাবে পরিবর্তিত হয় তা অধ্যয়নের জন্য আমি ঠিক এটি করেছি।

উভয় পদ্ধতিই ভালভাবে কাজ করবে, এবং প্রথম কয়েকটি পাসের পরে দুজনের মধ্যে বেছে নেওয়া খুব কম হবে, তবে কমছে রিটার্নগুলি: এন ক্রমাগত ফোকাল অর্থগুলির কার্যকর ব্যাসার্ধ (সমস্ত একই পাড়ার আকার ব্যবহার করে) কেবলমাত্র (প্রায়) ফোকাল গড়ের ব্যাসার্ধের n গুণমানের বর্গমূল । সুতরাং, বিপুল পরিমাণে অস্পষ্টতার জন্য, আপনি আবার একটি বড় ব্যাসার্ধ পাড়া দিয়ে আবার শুরু করতে চান। আপনি যদি একটি অপ্রকাশিত ফোকাল গড় ব্যবহার করেন তবে ডিএম থেকে over-6 টি পাস চালান। আপনি যদি প্রায় গাউসিয়ান ওজন ব্যবহার করেন তবে আপনার কেবল একটি পাস প্রয়োজন: তবে আপনাকে ওজন ম্যাট্রিক্স তৈরি করতে হবে।

এই পদ্ধতির একটি সীমাবদ্ধ মান হিসাবে ডেমের গাণিতিক গড় আছে।


1
যদি আপনার ডেটাটিতে স্পাইক থাকে তবে আপনি হোবার দ্বারা প্রস্তাবিত আরও সাধারণ অস্পষ্টতা প্রয়োগের আগে প্রথমে একটি মিডিয়ান ফিল্টার ( en.wikedia.org/wiki/Median_filter ) চেষ্টা করতে পারেন ।
MerseyViking

@ মের্সি এটি একটি দুর্দান্ত পরামর্শ। আমি স্থানীয় আউটলিয়ারদের সাথে কোনও ডেম কখনও দেখিনি, তবে তারপরে আর কখনও আমার কোনও কাঁচা ডেম (যেমন কাঁচা LIDAR ফলাফল) প্রসেস করতে হয় নি। আপনি এফএফটি দিয়ে মিডিয়ান ফিল্টার করতে পারবেন না, তবে আপনার কেবল (সাধারণত) একটি 3 x 3 পাড়া দরকার তাই এটি যেহেতু দ্রুত অপারেশন।
whuber

ধন্যবাদ হুবুহু আমি অবশ্যই স্বীকার করতে পারি যে আমি কেবল প্রাক প্রসেসড LiDAR ডেটা ব্যবহার করেছি, তবে এসআরটিএম ডেটাতে এমন কয়েকটি উল্লেখযোগ্য স্পাইক রয়েছে যা একটি মাঝারি ফিল্টার থেকে উপকৃত হবে। এগুলি 2 বা 3 টি নমুনা প্রশস্ত হওয়ার প্রবণতা রয়েছে, সুতরাং একটি বৃহত্তর মাঝারি ফিল্টার প্রয়োজন।
MerseyViking

@ মের্সি আপনি এখনও 5 x 5 বা 7 x 7 এর বৃহত মাঝারি ফিল্টারটি দিয়ে ঠিক আছেন তবে আপনি যদি 101 x 101 ফিল্টারটি বিবেচনা করছেন (তবে) অপেক্ষা করার জন্য প্রস্তুত থাকুন! আপনি একটি গুরুত্বপূর্ণ বিষয়ও বিস্তারিতভাবে ব্যাখ্যা করার পরামর্শ দিয়েছেন: যে কোনও কিছু করার আগে ডেমের একটি অনুসন্ধান বিশ্লেষণ করা খুব ভাল ধারণা। এর মধ্যে স্পাইকগুলি (স্থানীয় আউটলিয়ার) সনাক্তকরণ এবং তাদের আকার এবং প্রসারকে চিহ্নিতকরণ অন্তর্ভুক্ত থাকবে। আপনি নিশ্চিত হতে চান যে আপনি কোনও ফিল্টার মুছতে মুছতে যাওয়ার আগে তারা সত্যই শিল্পী (এবং কোনও বাস্তব ঘটনা নয়)!
whuber

1
উচ্চতা ডেটাতে এফএফটি জন্য +1। দ্বি-দিকনির্দেশক স্ট্রাইপিং সরাতে 32 বিট এনইডি ডেটার জন্য আমি ঘাসে সেই কাজটি করেছি। শেষ পর্যন্ত, এটি সমস্যাযুক্তও ছিল কারণ এটি টেরেসিং এফেক্টটি পুনরায় চালু করেছিল যা অন্য অনেকগুলি কনট্যুর থেকে প্রাপ্ত ডিএমগুলিকে জর্জরিত করে।
জে গারনারি 21

43

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

import numpy as np
from scipy.signal import fftconvolve

def gaussian_blur(in_array, size):
    # expand in_array to fit edge of kernel
    padded_array = np.pad(in_array, size, 'symmetric')
    # build kernel
    x, y = np.mgrid[-size:size + 1, -size:size + 1]
    g = np.exp(-(x**2 / float(size) + y**2 / float(size)))
    g = (g / g.sum()).astype(in_array.dtype)
    # do the Gaussian blur
    return fftconvolve(padded_array, g, mode='valid')

আমি এটি অন্য ফাংশনে ব্যবহার করি যা জিডিএল এর মাধ্যমে ফ্লোট 32 জিওটিআইএফএফগুলি পড়ে / লেখেন (চিত্র প্রক্রিয়াকরণের জন্য 0-255 বাইটে পুনরুদ্ধার করার প্রয়োজন নেই), এবং আমি পিক্সেল আকারগুলি ব্যবহার করার চেষ্টা করেছি (উদাহরণস্বরূপ, 2, 5, 20) এবং এটিতে রয়েছে সত্যই সুন্দর আউটপুট (1: 1 পিক্সেল এবং ধ্রুব নূন্যতম / সর্বাধিক পরিসীমা সহ আর্কজিআইএসে ভিজ্যুয়ালাইজড):

গাউসিয়ান ডিটিএম

দ্রষ্টব্য: এই উত্তরটি আরও দ্রুত এফএফটি-ভিত্তিক সংকেত.ফ্টকনক্লভ প্রসেসিং ফাংশনটি ব্যবহার করতে আপডেট করা হয়েছিল ।


1
+1 চমৎকার সমাধান! আমি নিশ্চিতভাবে জানি না, তবে এটি একটি ভাল বাজি যা সংকেত। কনভলভ এফএফটি ব্যবহার করে।
whuber

আমি লিখছি এমন একটি অটো-সেলাইয়ের সরঞ্জামের জন্য আমি কিছু ঝাপসা কোড খুঁজছিলাম এবং এতে হোঁচট খেয়েছি। ভাল কাজ @ মাইকটাইজ!
রাগী ইয়াছার বুড়ুম

@ রাগ্যায়াসেরবুরহুম আপনার সরঞ্জামটি সম্পর্কে আরও শুনতে পছন্দ করবেন। মাইকটাইউজ দুর্দান্ত উত্তর এবং কোড স্নিপেট অনেক প্রশংসিত।
জে লৌরা

@ জয়লৌড়া বিশেষ কিছু নয়, কেবল কিছু ছবি অটোস্টিচ করার জন্য একটি সরঞ্জাম লিখেছিলাম যা আমি কিছু বেলুন সহ বন্ধুদের সাথে নিয়েছিলাম। অরফিও
রাগী ইয়াসার বুড়হুম

2
@ এই রুটিনটি সংশোধন করার পরে, এটি এফএফটি ব্যবহার করছিল না, তবে এটি এখন, এবং আরও দ্রুত।
মাইক টি

4

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

আমি প্রক্রিয়াটিতে মাইকের ফাংশনটি কিছুটা আপগ্রেড করেছি:

def __gaussian_blur1d(self, in_array, size):
        #check validity
        try:
            if 0 in in_array.shape:
                raise Exception("Null array can't be processed!")
        except TypeError:
            raise Exception("Null array can't be processed!")
        # expand in_array to fit edge of kernel
        padded_array = np.pad(in_array, size, 'symmetric').astype(float)
        # build kernel
        x, y = np.mgrid[-size:size + 1, -size:size + 1]
        g = np.exp(-(x**2 / float(size) + y**2 / float(size)))
        g = (g / g.sum()).astype(float)
        # do the Gaussian blur
        out_array = fftconvolve(padded_array, g, mode='valid')
        return out_array.astype(in_array.dtype)

বৈধতার চেকগুলি বেশ স্ব-স্পষ্ট, তবে কী গুরুত্বপূর্ণ তা ভাসা এবং পিছনে কাস্ট করা। এর আগে, ফাংশনটি পূর্ণসংখ্যার অ্যারেগুলিকে কালো করে তোলে (কেবল জিরো), কারণগুলিকে মানগুলির যোগফল ( g / g.sum()) দ্বারা ভাগ করে ।


3

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

নোট যা Radiusদূরত্ব নয়, কোষের সংখ্যাকে বোঝায়।

স্মুথিং (গাউসিয়ান) ব্যবহার করে এখানে একটি উদাহরণ দেওয়া হল :

  • কাঁচা:

    ছাঁকনিবিহীন

  • ফিল্টার করা:

    ছাঁকনি


1

গাউসিয়ান ব্লার এবং দুর্দান্ত অ্যানিমেশনের জন্য দুর্দান্ত সমাধান। উপরে উল্লিখিত এসরি ফিল্টার সরঞ্জাম সম্পর্কে, এটি কেবলমাত্র এসরি "ফোকাল স্ট্যাটিস্টিকস" সরঞ্জামটি একটি 3x3 আকারের হার্ড-কোডড। ফোকাল পরিসংখ্যান সরঞ্জাম আপনাকে আপনার চলমান ফিল্টার, আকার এবং আপনি যে স্ট্যাটিস্টিকিক চালাতে চান তার আকারের উপর আরও অনেক বিকল্প দেয়। http://desktop.arcgis.com/en/arcmap/latest/tools/spatial-analyst-toolbox/focal-statistics.htm

আপনি একটি "অনিয়মিত" ফিল্টার তৈরি করতে পারেন যেখানে আপনি প্রতিটি ঘরের জন্য ওজন ব্যবহার করে নিজের টেক্সট ফাইলে পাস করেন। কলামগুলির জন্য সাদা স্পেস-সীমাবদ্ধ মান সহ, আপনার ফিল্টার অঞ্চলে পাঠ্য ফাইলটিতে আপনি যতগুলি সারি চান চান has আমি অনুমান করি আপনার সর্বদা একটি বিজোড় সংখ্যক সারি এবং কলাম ব্যবহার করা উচিত, সুতরাং আপনার লক্ষ্য সেলটি মাঝখানে রয়েছে।

আমি বিভিন্ন ওজন নিয়ে খেলতে একটি এক্সেল স্প্রেডশিট তৈরি করেছি যা এই ফাইলটিতে আমি কেবল অনুলিপি / পেস্ট করেছি। যদি আপনি সূত্রগুলি সামঞ্জস্য করেন তবে উপরের মত একই ফলাফল অর্জন করা উচিত।

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