Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сегментация изображения, помогите разобраться в коде новичку 
:(
    Опции темы
LARG
Дата 10.1.2011, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.2.2006

Репутация: нет
Всего: нет



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

unit lab1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, TeEngine, Series, TeeProcs, Chart, math,
  ComCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    BitBtn1: TBitBtn;
    OpenDialog1: TOpenDialog;
    BitBtn2: TBitBtn;
    Image2: TImage;
    Chart1: TChart;
    Series1: TBarSeries;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    Procedure gist;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  M: array [0..255] of integer;
  ser, pix: integer;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var i,j,r,ind1,ind2,max,min,indmax,indmin:integer;
    myColor : TColor;
    k:byte;
    s:real;
    mas:array of integer;
begin
 gist;

 for i:=1 to 255 do
    if m[i]<>0 then
       begin
       ind1:=i;
       break;
       end;

   for i:=255 downto 1 do
   if m[i]<>0 then
       begin
       ind2:=i;
       break;
       end;

  //находим максимум
  max:=m[ind1];
  for i:=ind1+1 to ind2 do
     if max<m[i] then begin
                      max:=m[i];
                      indmax:=i;
                    end;

 i:=0;
 j:=0;
 s:=0;
 while i<=250 do begin
  if (indmax>i)and(indmax<i+50)then
   begin
   ind2:=i;
   if 255-indmax<indmax then
    begin
    while j<i do
     begin
      for k:=j to j+50 do
       s:=s+m[k];
      s:=s/50;
      setlength(mas,length(mas)+1);
      mas[(round(j/50))]:=round(s);
      j:=j+50;
     end;
    break;
    end;
    end;
   i:=i+50;
   end;

   s:=mas[0];
   for i:=1 to length(mas)-1 do
    if s<mas[i] then
     begin
      s:=mas[i];
      ind1:=50*i+50;
     end;

 min:=m[ind1];
 for i:=ind1 to ind2-1 do
  if min>m[i+1]then begin
                      min:=m[i+1];
                      indmin:=i+1;
                    end;

  for i:=1 to Form1.Image1.Width do begin
     for j:=1 to Form1.Image1.Height do begin
          myColor := Form1.Image1.Canvas.pixels[i,j];
          R:= GetRValue(MyColor);
          if R<indmin then
          Image2.Canvas.Pixels[i,j]:=RGB(round(R),round(R),round(R));
     end;
 end;
end;

Procedure TForm1.gist;
var i,j,r,g,b,s:integer;
    myColor : TColor;
begin
 Form1.Chart1.Series[0].Clear;
 for i:=0 to 255 do M[i]:=0;
 for i:=1 to Form1.Image1.Width do begin
     for j:=1 to Form1.Image1.Height do begin
         myColor := Form1.Image1.Canvas.pixels[i,j];
          R:= GetRValue(MyColor);
          M[R]:=M[R]+1;
     end;
 end;
 for i:=0 to 255 do begin
     Form1.Chart1.Series[0].AddXY(i,M[i])
 end;
end;
end.


Что именно интересует, для чего в коде  ind1:=50*i+50;   как я понял, это деление гистограммы или как. Что если поменять на 100 и 20, особо ничего не изменилось. а если поставить 50 и 100, то будут перенесены лишь части букв... не могу разобрать
 
Код

s:=mas[0];
   for i:=1 to length(mas)-1 do
    if s<mas[i] then
     begin
      s:=mas[i];
      ind1:=50*i+50;
     end;


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0403 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.