تشخیص روز و شب در تصویر

سلام
امروز تونستم یک کار باحال انجام بدم که باهاش میشه تشخصی داد یک تصویر روز هست یا شب
این کار رو روی تصاویری که از یک ماشین ثبت شده بود انجام دادم

روند کار به این صورت هست که باید تک تک پیکسل های یک تصویر رو بررسی کنیم و R+G+B کنیم و عدد جمع شده رو تقسیم بر ۳ میکنیم . عددی که حاصل میشه اگر بالاتر از ۱۰۰ بود میتونیم بگیم که هوا روشنه و اگر این عدد زیر ۱۰۰ بود یعنی مقدار پیکسل های تیره بیشره و احتمالا شب هست.
البته بهتره که اینکار رو روی چند تصویر پشت سر هم تست کنید تا قایل اطمینان باشه نتیجه.

این کار رو با php انجام دادم . شما میتونید با هر زبان برنامه نویسی دیگه ای انجامش بدین

ابتدا باید سایز تصویر رو بدست بیاریم و که متوجه بشیم تعداد پیکسل هاش چقدر هست (به عنوان مثال یه تصویر ۶۰۰ در ۸۰۰ تعداد پیکسل هاش میشه ۴۸۰۰۰۰ این عدد از ضرب این دو عدد بدست میاد)
سپس یک حلقه میزاریم به تعداد این عدد . در واقع ما یک آرایه داریم که ۸۰۰ عضو داره که هر عضوی ۶۰۰ عضو داره و هر عضو اون دارای ۴ عضو هست که اسماشون هست “red,green,blue,alpha” حالا باید مقادیر red,green,blue رو با هم جمع کنیم و عدد بدست اومده رو تقسیم بر ۳ کنیم.
این کار رو به تعداد همه پیکسل ها انجام میدیم.

در نهایت باید همه اعداد بدست اومده رو با هم جمع کنیم و تقسیم بر تعداد اعضای آرایه کنیم که میانگینش بدست بیاد . حالا اگر این عدد بالای ۱۰۰ بود میتونیم بگیم که هوا روشنه و اگر زیر ۱۰۰ بود یعنی احتمالا هوا تاریکه.

کد رو میتونید ببینید

<?php
$img = 'images/1.jpg';
$imgHand = imagecreatefromjpeg($img);
$imgSize = GetImageSize($img);
$imgWidth = $imgSize[0];
$imgHeight = $imgSize[1];
$pxlCorArr= array();
for ($l = 0; $l < $imgHeight; $l++) {
    $pxlCorArr[$l] = array();
    for ($c = 0; $c < $imgWidth; $c++) {
        $pxlCor = ImageColorAt($imgHand,$c,$l);
        $pxlCorArr[$l][$c] = ImageColorsForIndex($imgHand, $pxlCor);
    }
}
$j = 0;
foreach($pxlCorArr as $pix) {
    $i = 0;
    foreach($pix as $nums) {
        $res = ($nums['red'] + $nums['green'] + $nums['blue']) / 3;
        $list[$j][] = $res;
        unset($res);
        $i++;
    }
    $j++;
}
foreach($list as $item) {
    $array[] = array_sum($item)/$imgWidth;
}
$resLast = array_sum($array)/count($array);
echo $resLast;

خب فقط یه نکته باید مد نظر داشته باشید که GD روی php فعال باشه و فانکشن imagecreatefromjpeg و imagecreatefrompng روی سرور لینوکسی شما نصب باشه.

 

پیروز و موفق باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *