Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Processing:Примеры/Обнаружение границ объектов

Материал из Онлайн справочника
Перейти к: навигация, поиск


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Описание[1]

Высокочастотный фильтр, увеличивающий резкость изображения. Эта программа анализирует каждый пиксель изображения относительно его соседних пикселей, а затем на основе этой информации увеличивает резкость изображения.

Этот скетч в данный момент плохо работает в режиме JavaScript.

Пример

  1. float[][] kernel = {{ -1, -1, -1},
  2.                     { -1,  9, -1},
  3.                     { -1, -1, -1}};
  4.                    
  5. PImage img;
  6.  
  7. void setup() {
  8.   size(640, 360);
  9.   img = loadImage("moon.jpg"); // загружаем исходное изображение
  10.   noLoop();
  11. }
  12.  
  13. void draw() {
  14.   image(img, 0, 0); // рисуем изображение на координатах (0,0)
  15.   img.loadPixels();
  16.   // создаем непрозрачное изображение
  17.   // того же размера, что и оригинал:
  18.   PImage edgeImg = createImage(img.width, img.height, RGB);
  19.   // при помощи двух циклов for()
  20.   // проходим через все пиксели изображения:
  21.   for (int y = 1; y < img.height-1; y++) {  // пропускаем верхний
  22.                                             // и нижний края
  23.     for (int x = 1; x < img.width-1; x++) { // пропускаем левый
  24.                                             // и правый края
  25.       float sum = 0; // переменная для «суммарного цвета»,
  26.                      // который будет присвоен пикселю-ядру
  27.       for (int ky = -1; ky <= 1; ky++) {
  28.         for (int kx = -1; kx <= 1; kx++) {
  29.           // рассчитываем позицию пикселя в матрице
  30.           // (всего этих пикселей будет 9):
  31.           int pos = (y + ky)*img.width + (x + kx);
  32.           // изображение монохромное,
  33.           // поэтому красный, зеленый и синий каналы идентичны:
  34.           float val = red(img.pixels[pos]);
  35.           // умножаем цветовое значение пикселя
  36.           // на значение внутри матрицы (1/9 = 0.111...),
  37.           // а затем суммируем результаты 9 пикселей матрицы,
  38.           // получая в результате «суммарный цвет»
  39.           // в виде переменной «sum»:
  40.           sum += kernel[ky+1][kx+1] * val;
  41.         }
  42.       }
  43.       // задаем этот монохромный «суммарный цвет»
  44.       // соответствующему пикселю на новом изображении:
  45.       edgeImg.pixels[y*img.width + x] = color(sum, sum, sum);
  46.     }
  47.   }
  48.   // обновляем данные внутри массива «edgeImg.pixels[]»:
  49.   edgeImg.updatePixels();
  50.   image(edgeImg, width/2, 0); // рисуем новое изображение
  51. }

См.также

Внешние ссылки

  1. processing.org - Edge Detection