طمس غاوسي
يعد Gaussian Blur ، والمعروف أيضًا باسم Gaussian Grashying ، تأثيرًا معالجة يستخدم على نطاق واسع في برنامج معالجة الصور مثل Adobe Photoshop و Gimp و Paint.net. عادة ما يتم استخدامه لتقليل ضوضاء الصورة وتقليل مستوى التفاصيل. يشبه التأثير البصري للصورة التي تم إنشاؤها بواسطة تقنية Blur هذه الصورة من خلال شاشة شفافة ، والتي تختلف اختلافًا كبيرًا عن تأثير التصوير خارج العدسة خارج تركيز الخوخ والظلال العادية. يتم استخدام تنعيم Gaussian أيضًا في مراحل ما قبل المعالجة في خوارزميات رؤية الكمبيوتر لتعزيز تأثيرات الصورة للصور على موازين مختلفة. من منظور رياضي ، فإن عملية طمس غاوسي للصورة هي إتلال مع التوزيع الطبيعي. نظرًا لأن التوزيع الطبيعي يسمى أيضًا توزيع Gaussian ، فإن هذه التكنولوجيا تسمى Gaussian Fuzzy. سوف يولد الالتزام بالصورة وطمس المربع الدائري تأثيرًا أكثر دقة للتصوير خارج التركيز. نظرًا لأن تحويل فورييه للوظيفة الغوسية هو وظيفة غوسية أخرى ، فإن طمس غاوسي هو مرشح تمرير منخفض للصورة.
يستخدم Gaussian fuzzing وظيفة كثافة التوزيع الطبيعية في Gaussian لحساب تحول كل بكسل في الصورة.
استنادًا إلى الوظيفة الغوسية أحادية البعد ، يمكن اشتقاق وظيفة غوسية ثنائية الأبعاد:
حيث R هو نصف القطر الغامض ، r^2 = x^2 + y^2 ، و σ هو الانحراف المعياري للتوزيع الطبيعي. في الفضاء ثنائي الأبعاد ، تعد خطوط محيط السطح الناتجة عن هذه الصيغة دوائر متحدة المركز والتي يتم توزيعها عادة من المركز. يتم تحويل مصفوفة الالتصاف المكونة من وحدات البكسل مع توزيع غير صفري مع الصورة الأصلية. قيمة كل بكسل هي متوسط مرجح لقيم البيكسلات المجاورة حولها. قيمة البيكسل الأصلي لديها أكبر قيمة توزيع غووس ، لذلك لديها أكبر وزن. مع وصول وحدات البكسل المجاورة بعيدًا عن البكسل الأصلي ، تصبح أوزانها أصغر وأصغر. تحافظ عملية الغموض هذه على تأثيرات الحافة أكثر من غيرها من المرشحات الغامضة معادلة.
في الواقع ، من السهل تنفيذ طمس غاوسي على iOS. في وقت مبكر من iOS 5.0 ، كان هناك واجهة برمجة تطبيقات للصور الأساسية ، ويتم توفير عدد كبير من تطبيقات المرشح في مكتبة CoreImage.Framework.
+(uiimage *) coreBlurimage: (Uiimage *) صورة withblurnumber: (cgfloat) Blur {cicontext *context = [cicontext contextWithOptions: nil] ؛ ciimage *inputImage = [ciimage imageWithCgimage: image.cgimage] ؛ // set filter cifilter *filter = [cifilter filterwithName:@"cigaussianblur"] ؛ [Filter setValue: InputImage forkey: KciinputImageKey] ؛ [filter setValue: @(blur) forkey: @"inputRadius"] ؛ // blurimage ciimage *result = [filter valueforkey: KciOutputImageKey] ؛ cgimageref outimage = [Context CreateCgimage: نتيجة من Rect: [مدى النتائج]] ؛ uiimage *blurimage = [uiimage imageWithCgimage: outimage] ؛ cgimagerelease (outimage) ؛ إرجاع blurimage ؛}يمكنك أيضًا استخدام API الأصلي - Renderscript لتنفيذ Gaussian Blur على Android ، ولكن API من Android أعلى من 17 ، وهو إصدار Android 4.2.
/** * خوارزمية لتنفيذ غاوس غامض باستخدام renderscript * param bitmap * @return */public bitmap blur (bitmap bitmap) {// دعنا ننشئ صورة نقطية فارغة مع pitmap.getwid () bitmap.config.argb_8888) ؛ // مثبتة على RendersCriprUndRenderscript Rs = renderscript.create (getApplicationContext ()) ؛ // إنشاء برنامج نصي undrinsic ullur باستخدام altenerscriptintrintintrinsblur blurscript = scripteblur.crate. (In/Out) مع Renderscript و in/out bitmapsallocation allin = tinocation.createfrombitmap (rs ، bitmap) ؛ التخصيص almout = concloce.createfrombitmap (rs ، outbitmap) ؛ renderscriptblurscript.setinput (allin) ؛ blurscript.foreach (allout) ؛ // انسخ صورة نقطية نهائية تم إنشاؤها بواسطة Outbitmapallout.copyto (outbitmap) ؛ // إعادة تدوير bitmapbitmap.Recycle ()يوفر إطار الصورة CV4J الذي قمنا بتطويره أيضًا مرشحًا لتنفيذ طمس غاوسي.
مرشح Gaussianblurfilter = جديد gaussianblurfilter () ؛ filter.setsigma (10) ؛ rasyagedata.bitmap (bitmap) .addfilter (filter) .into (image2) ؛
يمكن ملاحظة أن الغاوسي الغامض المنفذ في CV4J يتوافق مع تأثير تنفيذ Renderscript.
من بينها ، رمز Gaussianblurfilter هو كما يلي:
الطبقة العامة gaussianbluRfilter تنفذ commonfilter {private float [] kernel ؛ private double sigma = 2 ؛ executorService mexecutor ؛ completeionservice <Void> service ؛ public gaussianblurfilter () {kernel = new float [0] ImageProcessor SRC) {Final int width = src.getWidth () ؛ النهائي int الارتفاع = src.getheight () ؛ حجم int النهائي = العرض*الارتفاع ؛ int dims = src.getChannels () TaskUtils.newFixedThreadPool ("CV4J" ، dims) ؛ service = New ExecutorCompletionservice <> (mexecutor) ؛ // save resultfor (int i = 0 ؛ i <dims ؛ i ++) {final int temp = i ؛ service.submit (new call <void> {public void call () src.tobyte (temp) ؛ byte [] temp = new byte [size] ؛ inpixels ، temp ، width ، height) ؛ // h gaussianblur (temp ، inpixels ، height ، width) ؛ // v gausainreturn null ؛}) ؛ ه) { {int subcol = 0 ؛ int index = 0 ، index2 = 0 ؛ float sum = 0 ؛ int k = kernel.length -1 ؛ for (int row = 0 ؛ row <height ؛ row ++) {int c = 0 ؛ index = row ؛ for (int col = 0 ؛ col <width ؛ col ++) {sum = 0 ؛ for (int m = -k ؛ m <kernel ؛ menmens. m ؛ if (subcol <0 || subcol> = width) {subcol = 0 ؛} index2 = row * width +subcol ؛ c = inpixels [index2] & 0xff ؛ sum += c * kernel [math.abs (m)] ؛ Makegaussiankernel (Sigma النهائي ، الدقة المزدوجة النهائية ، int maxradius) {int kradius = (int) math.ceil (sigma*math.sqrt (-2*math.log (دقة)))+1 ؛ if (maxradius <50) maxradius = 50 ؛ maxradius) kradius = maxradius ؛ kernel = تعويم جديد [kradius] ؛ من أجل (int i = 0 ؛ i <kradius ؛ i ++) // gaussian functionKernel [i] = (float) (math.exp (-0.5*i*i/sigma/sigma)) ؛ maxradius) {sum = kernel [0] ؛ for (int i = 1 ؛ i <kradius ؛ i ++) sum+= 2*kernel [i] ؛} sum = sigma*math.sqrt (2*math.pi) ؛ لـ (int i = 0 ؛ i <kradius ؛ i ++) {double v = (kernel [i]/sum) ؛ kernel [i] = (float) v ؛} return ؛}}الالتفاف الفضائي
غالبًا ما يتم مواجهة الالتفاف ثنائي الأبعاد في معالجة الصور ، ويتم استخدام معظم الأشكال المنفصلة للالتفاف ثنائي الأبعاد في معالجة الصور.
فيما يلي العديد من آثار الالتواء التي تنفذها CV4J.
يدعم CV4J حاليًا مرشحات الالتفاف المكاني التالي
| فلتر | اسم | تأثير |
|---|---|---|
| ConnectolutionHvfilter | التفاف | طمس أو الحد من الضوضاء |
| Minmaxfilter | الحد الأقصى والحد الأدنى لتصفية | تقلل |
| sapnoisefilter | ضوضاء الملح والفلفل | زيادة الضوضاء |
| Sharpfilter | شحذ | تعزيز |
| medimafilter | الترشيح المتوسط | تقلل |
| Laplasfilter | لابلاس | استخراج الحواف |
| FindEdgeFilter | ابحث عن الحافة | استخراج التدرج |
| Sobelfilter | التدرج | احصل على استخراج التدرج في اتجاهات x و y |
| التباين | تصفية التباين | ترشيح تمرير عالي |
| maeroperatorfilter | مارس العملية | ترشيح تمرير عالي |
| USMFILTER | USM | تعزيز |
CV4J هي مكتبة معالجة الصور التي طورتها قاتمة الأسماك و I ، وما زالت في إصدار مبكر.
الوظائف التي تم تنفيذها في الوقت الحاضر:
هذا الأسبوع ، قمنا بإجراء تعديلات كبيرة على CV4J وحسننا العمارة الكلية. تتم إضافة وظيفة الالتفاف المكاني (تعزيز الصورة ، شحذ ، وضوح ، إلخ). بعد ذلك ، سنقوم بتحليل الصور الثنائية (التآكل ، التوسع ، العمليات الفتح والإغلاق ، استخراج الكفاف ، إلخ)
لخص
ما ورد أعلاه هو كل محتوى هذه المقالة حول برمجة Java لتنفيذ طمس غاوسي والالتفاف المكاني للصور. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى هذا الموقع:
70 سطر من رمز Java لتنفيذ مشاركة خوارزمية الشبكة العصبية العميقة
تنفذ لغة Java مثال الكود لخوارزمية Cruzkal بناءً على الرسوم البيانية المعتمدة غير الموجهة
مثال رمز كامل لخوارزمية Java لتنفيذ شجرة حمراء وسوداء
إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!