Ali Ismael نشر 30 أكتوبر 2021 أرسل تقرير نشر 30 أكتوبر 2021 أقوم بعملية تطبيع Normalizing للصورة باستخدام الدالة cv2.normalize لتغيير نطاق قيم كثافة البكسل (أريد جعلها بين ال 0 وال 1)، وقمت بتطبيق خوارزمية NORM_L1 لكن لم ينجح الأمر؟ وتظهر الصورة سوداء بقيم صفرية. import cv2 import Image import numpy myimage = cv2.imread('/content/test5 openeye.jpg',0) img_normlaized=cv2.normalize(myimage,None,alpha=0,beta=1,norm_type=cv2.NORM_L1) image = Image.fromarray(img_normlaized) image.save("image.jpg") 1 اقتباس
0 Ali Haidar Ahmad نشر 30 أكتوبر 2021 أرسل تقرير نشر 30 أكتوبر 2021 إذا أردت زيادة وضوح الصورة والتخلص من بعض الضجيج ( تحسينها بشكل عام ) قم بضبط ألفا (القيمة الدنيا للبكسل على 0) والعليا على 255. حيث أن هذين ال%D إذا أردت زيادة وضوح الصورة والتخلص من بعض الضجيج ( تحسينها بشكل عام ) قم بضبط ألفا (القيمة الدنيا للبكسل على 0) والعليا على 255. حيث أن هذين الوسيطين يمثلان القيم العليا والدنيا لبكسلات الصورة الناتجة. والقيم الناتجة للبكسلات ستكون من النمط unit8 أي أعداد صحيحة ب 8 بت ضمن المجال من 0 ل 255. واستخدم إحدى خوارزميات التطبيع (norm_type) مثل: cv.NORM_INF - cv.NORM_L1 - cv.NORM_L2 - cv.NORM_MINMAX. أما في حالة أردت تغيير نطاق قيم كثافة البكسل (حالتك) فيجب وضع القيم العليا والدنيا ضمن المجال الذي تحتاجه وفي حالتك يجب أن تضعهم على 0 و 1 لكن هذا سينتج مصفوفة بقيم صفرية لأن نمط الخرج سيكون unit8 لذا يجب تغيير نمط الإخراج وجعله float لذا يجب أن تقوم باستخدام وسيط إضافي هو dtype وضبطه على cv2.CV_32F. ,وقم باستخدام خوارزمية cv2.NORM_MINMAX لذا لحل مشكلتك: myimage = cv2.imread('/content/test5 openeye.jpg',0) img_normlaized=cv2.normalize(myimage,None,alpha=0,beta=1,norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F) img_normlaized والنتيجة: array([[0.5179283 , 0.5179283 , 0.5179283 , ..., 0.5179283 , 0.5179283 , 0.5179283 ], [0.5179283 , 0.5179283 , 0.5179283 , ..., 0.5179283 , 0.5179283 , 0.5179283 ], [0.5179283 , 0.5179283 , 0.5179283 , ..., 0.5179283 , 0.5179283 , 0.5179283 ], ..., [0.44621515, 0.44621515, 0.44621515, ..., 0.45019922, 0.45019922, 0.45019922], [0.44621515, 0.44621515, 0.44621515, ..., 0.44621515, 0.44621515, 0.44621515], [0.44621515, 0.44621515, 0.44621515, ..., 0.44621515, 0.44621515, 0.44621515]], dtype=float32) اقتباس
0 Ahmed Sharshar نشر 30 أكتوبر 2021 أرسل تقرير نشر 30 أكتوبر 2021 في البداية دعنا نفهم كيف تعمل L1-NORM حتى نرى اذا كان مناسبا لما تريد أم لا. L1 تقوم بجعل قيم البيكسل للصورة بين 0 و 1 عن طريق المعادلة التالية: بينما في L2 تقوم ايضا بجعل القيم بين 0 و 1 لكن بمعادلة مختلفة وهي جذر مربع القيم كالتالي: ويمكنك تطبيق احداهما يدويا على الصور في بايثون، اما عن طريقة استخدام ال normalization في opencv فهي كالتالي: #استدعاء المكتبات import cv2 as cv import numpy as np #قراءة الصورة img = cv.imread('city.jpeg') norm_img = np.zeros((800,800)) #تعديل أبعاد الصورة باستخدام normalize final_img = cv.normalize(img, norm_img, 0, 255, cv.NORM_MINMAX) #حفظ الصورة cv.imwrite('city_normalized.jpg', final_img) cv.waitKey(0) cv.destroyAllWindows() الصورة الأصلية: بعد عمل normalization: ويمكنك استخدام cv.NORM_L1 أو cv.NORM_L2 بدلا من cv.NORM_MINMAX . اقتباس
السؤال
Ali Ismael
أقوم بعملية تطبيع Normalizing للصورة باستخدام الدالة cv2.normalize لتغيير نطاق قيم كثافة البكسل (أريد جعلها بين ال 0 وال 1)، وقمت بتطبيق خوارزمية NORM_L1 لكن لم ينجح الأمر؟ وتظهر الصورة سوداء بقيم صفرية.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.