2013-06-02 38 views
6

Mục tiêu của tôi là tìm kết quả gần nhất của RGB so với RGB từ mảng đó. Tôi đã tạo ra một hàm lặp lại mỗi pixel trong một bức ảnh. Điều duy nhất tôi cần bây giờ là để tìm màu gần nhất của mỗi pixel trong hình ảnh với màu từ mảng.PHP - Tìm RGB gần nhất với RGB được xác định trước từ danh sách

$colors = array(
    array(221,221,221), 
    array(219,125,62), 
    array(179,80,188), 
    array(107,138,201), 
    array(177,166,39), 
    array(65,174,56), 
    array(208,132,153), 
    array(64,64,64), 
    array(154,161,161), 
    array(46,110,137), 
    array(126,61,181), 
    array(46,56,141), 
    array(79,50,31), 
    array(53,70,27), 
    array(150,52,48), 
    array(25,22,22) 
); 

tôi đã cố gắng chuyển đổi hình ảnh để 8bits để giảm số lượng màu sắc và so sánh chúng sau này trong cơ sở dữ liệu nhưng điều đó chỉ có vẻ không phải là một ý tưởng tốt.

+0

tổng hợp các mảng và so sánh sự khác biệt tuyệt đối nhỏ nhất? – bwoebi

+2

Bạn muốn sử dụng [_distance metric_] (http://stackoverflow.com/a/1767967/1553481) nào? Sự khác biệt tuyệt đối, sự khác biệt tuyệt đối bình phương, hoặc có lẽ là một số liệu về tỷ lệ sinh? – likeitlikeit

+0

chỉ số thụ thai. –

Trả lời

6

Hãy thử nó như thế này:

$inputColor = array(20,40,80); 

function compareColors($colorA, $colorB) { 
    return abs($colorA[0] - $colorB[0]) + abs($colorA[1] - $colorB[1]) + abs($colorA[2] - $colorB[2]); 
} 

$selectedColor = $colors[0]; 
$deviation = PHP_INT_MAX; 

foreach ($colors as $color) { 
    $curDev = compareColors($inputColor, $color); 
    if ($curDev < $deviation) { 
     $deviation = $curDev; 
     $selectedColor = $color; 
    } 
} 

var_dump($selectedColor); 

Ưu điểm của giải pháp này là bạn có thể dễ dàng thay thế các chức năng so sánh. Cũng có thể sử dụng

Tuyên bố từ chối trách nhiệm: Có thể có nhiều cách thực hiện thanh lịch hơn, có thể tận dụng map.

+0

Chức năng của bạn dường như không hoạt động đúng cách. Tôi không chắc có lẽ tôi cần phải sắp xếp màu của mình bằng cách nào đó? –

+0

Phân loại chắc chắn là không cần thiết. Có chuyện gì vậy? – likeitlikeit

+0

Tôi đặt inputColor thành mảng (20,22,22) và kết quả đã cho là 221,221,221 mặc dù nó phải là 25,22,22. Đó là gần gũi hơn nhiều. –

Các vấn đề liên quan