مرشح ممر BANDPAST من صورة FFT Applied Image. (مثل خوارزمية تصفية ImageJ Bandjpass)

StackOverflow https://stackoverflow.com/questions/2579444

سؤال

هناك وظيفة جيدة أحتاجها ، والتي يتم تنفيذها في برنامج Java: ImageJ. أحتاج إلى فهم الخوارزمية المستخدمة هناك. الوظيفة لها عدة معلمات:نص الارتباط

وقبل استخدام FFT ، يقوم بتحويل الصورة إلى صورة خاصة: يستخدم مرشح Bandpass خوارزمية خاصة لتقليل القطع الأثرية الحافة (قبل تحويل فورييه ، يتم تمديد الصورة من خلال ربط نسخ متطابقة من أجزاء الصورة خارج الصورة الأصلية ، وبالتالي لا توجد قفزات تحدث عند الحواف)

هل يمكن أن تخبرني المزيد عن هذا التحول الخاص؟ في الواقع تبليط الصورة المرآة.

أنا أكتب على C ++ وأرغب في إعادة كتابة هذا الجزء من البرنامج على C ++.

EDIT1: أنا بحاجة إلى فهم كيفية قيامه بتشغيل الصور المتطابق مع البلاط ، فقد يكون ذلك خاصًا. في البداية ، يقوم في البداية بتحويل الصورة إلى صورة بحجم جديد ، لذلك سيكون ذلك: تحويلها من 600 × 480 إلى 1024 × 1024 صورة بحجمها. كيف يتم استخدام البلاط هنا؟

EDIT2: من الصعب أيضًا فهم هذا الوصف لوظيفة tilemirrorrors:

يضع ImageProcessor (ROI) في معالج صورة جديد من عرض الحجم × الارتفاع y في الموضع (x ، y). تنعكس الصورة حول حوافها لتجنب التفاف حول تأثيرات FFT. ما المقصود بـ "... من عرض الحجم × الارتفاع y في الموضع (x ، y)."؟

EDIT3: لقد قمت بتطبيق مرشح Bandpass ، ويعطي نفس النتائج مثل البرنامج الأصلي. لكن الخوارزمية نفسها في البرنامج الأصلي (أيضًا في برنامجي) بطيئة للغاية ، أريد استخدام هذا المرشح لم يكن في برنامجي مرة واحدة ، ولكنه يحسب ما يقرب من 0.5 إلى 2 ثانية لكل مكالمة (اعتمادًا على قيمة المعلمة). يستخدم تحويل FHT (وليس FFT) ، هل هو بسرعة أكبر من FFT؟ أعتقد أن المرشح نفسه غير محسن ، يرجى الاطلاع على تطبيق وظيفة FilterLargesMall:مصدر الرمز

هل كانت مفيدة؟

المحلول

لا أعرف بالضبط كيف تعمل هذه الوظيفة ، ولكن إليك الخوارزمية الأساسية لوظيفة مماثلة:

  1. حدد أصغر قوة من اثنين (تسميها بالرسائل البيانية) التي تكون أكبر من أكبر بعدين الصورة (نسميها xSize & ysize).

  2. قم بإنشاء صورة مربعة جديدة من الأخبار عن طريق الأخبار ونسخ محتويات الصورة إلى مركز الصورة الجديدة (أي يجب أن تبدأ أعلى اليسار من الصورة (newSize / 2 - xSize / 2, newSize / 2 - ySize / 2)).

  3. املأ وحدات البكسل المتبقية على النحو التالي ، لكل بكسل في (x ، y):

    • إذا x < (newSize / 2 - xSize / 2), ، انسخ البيكسل في العمود (newSize / 2 - xSize / 2) + (newSize / 2 - xSize / 2) - x والصف ص.
    • إذا y < (newSize / 2 - ySize / 2), ، انسخ البيكسل في الصف (newSize / 2 - ySize / 2) + (newSize / 2 - ySize / 2) - y والعمود x.
    • إذا كان كلا ما سبق صحيحًا ، فقم بنسخ البكسل في العمود (newSize / 2 - xSize / 2) + (newSize / 2 - xSize / 2) - x, ، صف (newSize / 2 - ySize / 2) + (newSize / 2 - ySize / 2) - y.
    • إذا x > (newSize / 2 + xSize / 2), ، انسخ البيكسل في العمود (newSize / 2 + xSize / 2) + (newSize / 2 + xSize / 2) - x والصف ص.
    • إذا y > (newSize / 2 + ySize / 2), ، انسخ البيكسل في الصف (newSize / 2 + ySize / 2) + (newSize / 2 + ySize / 2) - y والعمود x.
    • إذا كان كلا ما سبق صحيحًا ، فقم بنسخ البكسل في العمود (newSize / 2 + xSize / 2) + (newSize / 2 + xSize / 2) - x والصف (newSize / 2 + ySize / 2) + (newSize / 2 + ySize / 2) - y.

من المحتمل أن تكون هناك مكتبات ستجعل ذلك أسهل (أي التقليب ونسخ بيانات الصورة) ، لكنني لست على دراية بـ C ++ ، ويجب أن يكون هذا سهلاً للغاية لترميز نفسك طالما أن الأداء ليس مشكلة كبيرة. كن حذرًا في التقريب عن الصور التي تحتوي على أبعاد غريبة: تأكد من أنها متسقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top