Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Идентификация островов не-фуксия цвета: алгоритм поиска на розовом фоне

Delphi , Графика и Игры , Изображения

Идентификация островов на розовом фоне: алгоритм и примеры на Object Pascal

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

Описание задачи

Имеется прямоугольное изображение с розовым фоном (цвет clFuchsia), на котором размещены несколько "островов" — участков другого цвета. Необходимо идентифицировать эти острова.

Основной алгоритм

  1. Начать поиск с одного из углов изображения, например, с верхнего левого.
  2. Пройти по всем пикселям изображения, последовательно обрабатывая строки сверху вниз и слева направо.
  3. При обнаружении пикселя, цвет которого не соответствует розовому фону, начать поиск границ острова. Для этого необходимо определить ширину острова, двигаясь по строке до тех пор, пока не будет найден розовый пиксель или не будет достигнута крайняя правая граница изображения.
  4. Затем определить высоту острова, двигаясь по одному из столбцов до тех пор, пока не будет найден розовый пиксель или не будет достигнута крайняя нижняя граница изображения.
  5. Зафиксировать координаты верхнего левого угла острова, а также его ширину и высоту.
  6. Заменить пиксели острова на розовый цвет, чтобы обозначить, что они уже обработаны.
  7. Продолжить поиск следующего острова, начиная с правой стороны последнего найденного острова.
  8. Повторять шаги 3-7 до тех пор, пока не будет достигнут нижний правый угол изображения, что означает идентификацию всех островов.

Альтернативный алгоритм

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

Подтвержденный ответ

Для реализации алгоритма идентификации островов можно использовать следующий пример кода на Object Pascal:

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
  Vcl.ComCtrls;

type
  TSubImage = record
    LeftBound: Integer;
    RightBound: Integer;
    TopBound: Integer;
    BottomBound: Integer;
  end;

  ASubImages = Array of TSubImage;

  TForm2 = class(TForm)
    Button1: TButton;
    SourceImage: TImage;
    ListView1: TListView;
    SelectionImage: TImage;
    // Остальная часть класса...
  end;

var
  Form2: TForm2;
  SubImages: ASubImages;

// Код процедуры FindSubimages, Button1Click, FormCreate, ListView1SelectItem и SelectionImageMouseMove

procedure FindSubimages(Bitmap: TBitmap; var Subimages: ASubImages);
var X, Y, I: Integer;
    SubImagesMap: Array of Array of Integer;
begin
  // Инициализация и заполнение SubImagesMap
  // ...
end;

procedure TForm2.Button1Click(Sender: TObject);
var I: Integer;
    ListItem: TListItem;
    ListColumn: TListColumn;
begin
  // Вызов процедуры FindSubimages для поиска островов
  FindSubimages(SourceImage.Picture.Bitmap, Subimages);
  // Отображение результатов в ListView
  // ...
end;

end.

Данный код представляет собой модуль Unit2, который содержит процедуру FindSubimages для поиска островов на изображении, а также другие вспомогательные процедуры для отображения результатов в интерфейсе. Процедура FindSubimages использует двумерный массив SubImagesMap для отслеживания принадлежности каждого пикселя к определенному острову.

Альтернативные формы островов

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

Заключение

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

Создано по материалам из источника по ссылке.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Изображения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:47:52/0.0020179748535156/0