Обнаружение трещин в задней части тормозной системы автомобиля [закрыто]

Хорошо, я изменил ваше регулярное выражение следующим образом:

$txt = "Codes: C - Connected, S - Static, R - RIP, B - BGP,
       O - OSPF IntraArea (IA - InterArea, E - External, N - NSSA)
       A - Aggregate, K - Kernel Remnant, H - Hidden, P - Suppressed,
       U - Unreachable, i - Inactive

O E       0.0.0.0/0           via 10.140, bond1.30, cost 1:10, age 5  
                              via 10.141, bond1.31  
                              via 10.142, bond1.32  
O E       10.112/23       via 10.140, bond1.30, cost 46:1, age 2511  
O E       10.112/23       via 10.140, bond1.30, cost 46:1, age 2511  
O IA      10.138/29       via 10.140, bond1.30, cost 46, age 1029440  
C         10.141/29    is directly connected, bond2.35
C         10.141/29    is directly connected, bond2.35   
";

$regexp = '#(.) +([A-Z]{1,2}) +([\d.]+/\d+) +via ([\d.]+), ([a-zA-Z0-9.]+), cost [\d:]+, age \d+ +(?:\n +via ([\d.]+), ([a-zA-Z0-9.]+))*#m';
$matches = [];
preg_match_all($regexp, $txt, $matches, PREG_SET_ORDER);
var_dump($matches);

Это выводится:

array(4) {
  [0] =>
  array(8) {
    [0] =>
    string(125) "O E       0.0.0.0/0           via 10.140, bond1.30, cost 1:10, age 5  
                                  via 10.141, bond1.31"
    [1] =>
    string(1) "O"
    [2] =>
    string(1) "E"
    [3] =>
    string(9) "0.0.0.0/0"
    [4] =>
    string(6) "10.140"
    [5] =>
    string(8) "bond1.30"
    [6] =>
    string(6) "10.141"
    [7] =>
    string(8) "bond1.31"
  }
  [1] =>
  array(6) {
    [0] =>
    string(69) "O E       10.112/23       via 10.140, bond1.30, cost 46:1, age 2511  "
    [1] =>
    string(1) "O"
    [2] =>
    string(1) "E"
    [3] =>
    string(9) "10.112/23"
    [4] =>
    string(6) "10.140"
    [5] =>
    string(8) "bond1.30"
  }
  [2] =>
  array(6) {
    [0] =>
    string(69) "O E       10.112/23       via 10.140, bond1.30, cost 46:1, age 2511  "
    [1] =>
    string(1) "O"
    [2] =>
    string(1) "E"
    [3] =>
    string(9) "10.112/23"
    [4] =>
    string(6) "10.140"
    [5] =>
    string(8) "bond1.30"
  }
  [3] =>
  array(6) {
    [0] =>
    string(70) "O IA      10.138/29       via 10.140, bond1.30, cost 46, age 1029440  "
    [1] =>
    string(1) "O"
    [2] =>
    string(2) "IA"
    [3] =>
    string(9) "10.138/29"
    [4] =>
    string(6) "10.140"
    [5] =>
    string(8) "bond1.30"
  }
}

Это не работает, потому что отсутствует третий через

Новая версия, строка за строкой:

$txt = "Codes: C - Connected, S - Static, R - RIP, B - BGP,
       O - OSPF IntraArea (IA - InterArea, E - External, N - NSSA)
       A - Aggregate, K - Kernel Remnant, H - Hidden, P - Suppressed,
       U - Unreachable, i - Inactive

O E       0.0.0.0/0           via 10.140, bond1.30, cost 1:10, age 5  
                              via 10.141, bond1.31  
                              via 10.142, bond1.32  
O E       10.112/23       via 10.140, bond1.30, cost 46:1, age 2511  
O E       10.112/23       via 10.140, bond1.30, cost 46:1, age 2511  
O IA      10.138/29       via 10.140, bond1.30, cost 46, age 1029440  
C         10.141/29    is directly connected, bond2.35
C         10.141/29    is directly connected, bond2.35   
";

$grouped = [];
$i = 0;
foreach (explode("\n", $txt) as $line) {
    $matches = [];
    if (preg_match('#^(.) +([A-Z]{1,2}) +([\d.]+/\d+) +via ([\d.]+), ([a-zA-Z0-9.]+)#', $line, $matches)) {
        array_shift($matches);
        $grouped[++$i] = $matches;
    } else if(preg_match('#^ +via ([\d.]+), ([a-zA-Z0-9.]+)#', $line, $matches)){
        array_push($grouped[$i], $matches[1], $matches[2]);
    }
}
var_dump($grouped);

Теперь она работает:

array(4) {
  [1] =>
  array(9) {
    [0] =>
    string(1) "O"
    [1] =>
    string(1) "E"
    [2] =>
    string(9) "0.0.0.0/0"
    [3] =>
    string(6) "10.140"
    [4] =>
    string(8) "bond1.30"
    [5] =>
    string(6) "10.141"
    [6] =>
    string(8) "bond1.31"
    [7] =>
    string(6) "10.142"
    [8] =>
    string(8) "bond1.32"
  }
  [2] =>
  array(5) {
    [0] =>
    string(1) "O"
    [1] =>
    string(1) "E"
    [2] =>
    string(9) "10.112/23"
    [3] =>
    string(6) "10.140"
    [4] =>
    string(8) "bond1.30"
  }
  [3] =>
  array(5) {
    [0] =>
    string(1) "O"
    [1] =>
    string(1) "E"
    [2] =>
    string(9) "10.112/23"
    [3] =>
    string(6) "10.140"
    [4] =>
    string(8) "bond1.30"
  }
  [4] =>
  array(5) {
    [0] =>
    string(1) "O"
    [1] =>
    string(2) "IA"
    [2] =>
    string(9) "10.138/29"
    [3] =>
    string(6) "10.140"
    [4] =>
    string(8) "bond1.30"
  }
}
-2
задан ombahiwal 13 July 2018 в 15:52
поделиться

1 ответ

Не знаю, будет ли это работать. Но вы можете попробовать что-то вроде ниже.

  1. Преобразование изображения в серое изображение
  2. Преобразование серого изображения с использованием жесткого порога. (Вы также можете попробовать порог otsu)
  3. Теперь результат (назовем его BW1) будет иметь вашу треснутую область, а также черные тени выступающих частей задней панели.
  4. Посмотрите, что на сером изображении на самом деле размыты тени. (или используйте какой-либо метод для поиска внезапных изменений в сером изображении, трещины имеют внезапные изменения)
  5. Некоторые из них определяют, насколько плотная (или резкость изображения)
  6. Затем жесткий порог значение оценки для создания другого двоичного изображения (назовем его BW2).
  7. Теперь multiply или вы можете сказать and BW1 и BW2, чтобы получить требуемый выход.
1
ответ дан TimH 17 August 2018 в 13:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: