Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

Распознование Текста с сканера!   Найти похожие ветки 

 
pavels777   (2006-11-12 22:39) [0]

Уважаемые друзья!
Мне задали сделать программу которая распознаёт буквы, отсканированные с плохого листа бумаги.
Функцию очистки от шума я сделал. а вот сравнение с шаблоном в масиве сделать не получаеться :(
Я делал по сравнению количества чёрных пикселей, но ето приводит к неправильному результату!
Помогите пожалуйста!!


 
Palladin ©   (2006-11-12 22:41) [1]

девствительно... вот уж в орешник так в орешник...

ему задали сделать программу... фигасе... да еще с плохого листа бумаги... и то правда... контрольная работа для школьника...


 
pavels777   (2006-11-12 22:44) [2]

Ребята а может поможите?


 
pavels777   (2006-11-12 22:44) [3]

Ребята а может поможите?


 
DrPass ©   (2006-11-12 22:46) [4]


> pavels777   (12.11.06 22:44) [3]

Мы бы с радостью, да вот одна заминка - мой знакомый как раз занимался распознаванием букв в изображении... он эту работу делал четыре года, и получил за нее звание кандидата технических наук. У тебя есть столько времени?


 
Percent   (2006-11-12 22:48) [5]

Функцию очистки от шума я сделал

Это похвально. Какими алгоритмами ты пользовался?

Я делал по сравнению количества чёрных пикселей, но ето приводит к неправильному результату!

Ты неправильно написал программу.

Помогите пожалуйста!!

Чем тебе помочь?


 
pavels777   (2006-11-12 22:50) [6]

очистка от шумов (слабый цвет или другой цвет:)
begin
for y := 0 to Image1.Picture.Bitmap.Height - 1 do
for x := 0 to Image1.Picture.Bitmap.Width-1 do begin
 Color := image1.Canvas.Pixels[x,y];
if Color > $00878787
 then
 image1.Canvas.Pixels[x,y]:=$00FFFFFF;
  if Color < $00878787
 then
 image1.Canvas.Pixels[x,y]:=$00000000;

 end;


 
Ketmar ©   (2006-11-12 22:52) [7]

мда. если это -- очистка от шумов, то я точно танцую лучше Майи Плисецкой.


 
Kolan ©   (2006-11-12 22:53) [8]

Можешь использовать простейший алгоритм шаблона, но для букв врядли получится. Нейроннаня сеть - вариант 2...


 
pavels777   (2006-11-12 22:54) [9]

:)
но ето приметивная очистка. для перебора с шаблонами букв наверно подойдёт,


 
Palladin ©   (2006-11-12 22:55) [10]


> [6] pavels777

поможем... обязательно поможем понять, что даже простейшее определение примитивов стоит дипломной работы... если не больше... а то что ты там привел по поводу шумов это это знаешь... как уборка в квартире при помощи бульдозера...


 
Percent   (2006-11-12 22:56) [11]

Если у сканера шумы распределяются по такому закону, то в топку его, этот сканер.


 
Kolan ©   (2006-11-12 22:57) [12]

Нет если буквы, то шаблон лучьше не брать ошибаться будет он для чисел годится. Начни с выделения букв для этого можно использовать "проход фронтом". Те есть строка на картинке:

 абв

Идешь как-бы фронтом просматривая пикселы и находишь буквы...
Распознавание букв шаг 2


 
pavels777   (2006-11-12 22:59) [13]

Я тут кое что нашол

{&#194; &#253;&#242;&#238;&#233; &#247;&#224;&#241;&#242;&#232; &#232; &#239;&#240;&#238;&#232;&#241;&#245;&#238;&#228;&#232;&#242; &#240;&#224;&#241;&#239;&#238;&#231;&#237;&#224;&#226;&#224;&#237;&#232;&#229;}
{*}  repeat
{&#206;&#225;&#237;&#243;&#235;&#255;&#229;&#236; &#226;&#241;&#229; &#236;&#224;&#241;&#241;&#232;&#226;&#251;}
{*}  for i:=0 to 9 do
{*}  begin
{*}  dig[i]:=0;
{*}  s[i]:=0;
{*}  pos_x[i]:=0;
{*}  pos_y[i]:=0;
{*}  end;
{*}  for x:=dx to dx+mask_width-1 do
{*}  for y:=0 to 9 do  {&#206;&#239;&#240;&#229;&#228;&#229;&#235;&#229;&#237;&#237;&#224;&#255; &#238;&#225;&#235;&#224;&#241;&#242;&#252; &#237;&#224; &#234;&#224;&#240;&#242;&#232;&#237;&#234;&#229;}
{*}  begin
{*}  for i:=0 to 9 do s[i]:=0;
{*}  for x_:=0 to mask_width-1 do
{*}  for y_:=0 to mask_height-1 do  {&#193;&#229;&#240;&#229;&#236; &#239;&#238; &#238;&#247;&#229;&#240;&#229;&#228;&#232; &#226;&#241;&#229; &#242;&#238;&#247;&#234;&#232; &#232;&#231; &#236;&#224;&#241;&#234;&#232;}
{*}  begin
{*}  for i:=0 to 9 do begin   {&#207;&#238;&#228;&#241;&#242;&#224;&#226;&#235;&#255;&#229;&#236; &#226;&#241;&#229; &#236;&#224;&#241;&#234;&#232; &#239;&#238; &#238;&#247;&#229;&#240;&#229;&#228;&#232;}
{*}  if (pic[x_+x,y_+y]=masks[i][x_,y_])
{*}  and (masks[i][x_,y_]=1) then s[i]:=s[i]+1; {&#207;&#240;&#232; &#241;&#238;&#226;&#239;&#224;&#228;&#229;&#237;&#232;&#232; &#243;&#226;&#229;&#235;&#232;&#247;&#232;&#226;&#224;&#229;&#236; &#253;&#235;&#229;&#236;&#229;&#237;&#242; &#236;&#224;&#241;&#241;&#232;&#226;&#224; &#237;&#224; 1    }
{&#199;&#224;&#239;&#238;&#236;&#232;&#237;&#224;&#229;&#236; &#236;&#224;&#234;&#241;&#232;&#236;&#224;&#235;&#252;&#237;&#238;&#229; &#247;&#232;&#241;&#235;&#238; &#241;&#238;&#226;&#239;&#224;&#226;&#248;&#232;&#245; &#242;&#238;&#247;&#229;&#234; &#228;&#235;&#255; &#234;&#238;&#237;&#234;&#240;&#229;&#242;&#237;&#238;&#233; &#236;&#224;&#241;&#234;&#232;                                 }
{*}  if s[i]>dig[i] then  begin dig[i]:=s[i];pos_x[i]:=x;pos_y[i]:=y; end;
{*}  end;
{*}  end;
{*}  end;
{*}  max:=getmax(dig); {&#192; &#227;&#228;&#229; &#230;&#229; &#243; &#237;&#224;&#241; &#241;&#238;&#226;&#239;&#224;&#235;&#238; &#235;&#243;&#247;&#248;&#229; &#226;&#241;&#229;&#245;?                                          }
{C&#235;&#229;&#228;&#243;&#254;&#249;&#232;&#229; &#241;&#242;&#240;&#238;&#234;&#232; &#228;&#238; &#234;&#238;&#236;&#236;&#229;&#237;&#242;&#224;&#240;&#232;&#255; "!" &#236;&#238;&#230;&#237;&#238; &#226;&#251;&#234;&#232;&#237;&#243;&#242;&#252;                                                 }
{&#199;&#228;&#229;&#241;&#252; &#228;&#235;&#255; &#239;&#238;&#237;&#242;&#224; &#240;&#232;&#241;&#243;&#254;&#242;&#241;&#255; &#246;&#232;&#244;&#240;&#251; &#239;&#238; &#236;&#224;&#241;&#234;&#224;&#236;, &#226; &#242;&#229;&#245; &#239;&#238;&#231;&#232;&#246;&#232;&#255;&#245;, &#227;&#228;&#229; &#238;&#237;&#232; &#225;&#251;&#235;&#232; &#237;&#224; &#234;&#224;&#240;&#242;&#232;&#237;&#234;&#224;&#245;                }
{*}  for x:=dx to dx+fig_width do
{*}  for y:=0 to pic_height-1 do
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x,y]:=clblack;
{*}  for x:=0 to mask_width-1 do
{*}  for y:=0 to mask_height-1 do
{*}  if masks[max][x,y]=1 then
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x+pos_x[max],y+pos_y[max]]:=$00AAFFAA;
{!}
{&#199;&#224;&#239;&#238;&#236;&#232;&#237;&#224;&#229;&#236; &#241;&#224;&#236;&#243;&#254; &#236;&#229;&#237;&#252;&#248;&#243;&#254; &#226;&#229;&#240;&#238;&#255;&#242;&#237;&#238;&#241;&#242;&#252; &#241;&#238;&#226;&#239;&#224;&#228;&#229;&#237;&#232;&#255;                                                    }
{*}  if round(100*dig[max]/masks_pix[max])<prob then prob:=round(100*dig[max]/masks_pix[max]);
{*}  label1.Caption:=Label1.Caption+inttostr(max);
{*}  dx:=dx+fig_width; {&#209;&#228;&#226;&#232;&#227;&#224;&#229;&#236;&#241;&#255; &#226;&#239;&#240;&#224;&#226;&#238; &#228;&#235;&#255; &#241;&#235;&#229;&#228;&#243;&#249;&#229;&#233; &#246;&#232;&#244;&#240;&#251;}
{*}  until dx>=pic_width;


 
Gydvin ©   (2006-11-12 23:00) [14]

Как думаешь, fineReader наверное, профаны писали? И даже у них распознание с "плохого" листа толком не идет. Тем более там не только распознание по шаблону, а также есть встроенный словарь слов. С которым при сомнительном распознавание слов идет сравнение.


 
Percent   (2006-11-12 23:00) [15]

Kolan ©

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


 
pavels777   (2006-11-12 23:03) [16]

извеняюсь :)
{В этой части и происходит распознавание}
{*}  repeat
{Обнуляем все массивы}
{*}  for i:=0 to 9 do
{*}  begin
{*}  dig[i]:=0;
{*}  s[i]:=0;
{*}  pos_x[i]:=0;
{*}  pos_y[i]:=0;
{*}  end;
{*}  for x:=dx to dx+mask_width-1 do
{*}  for y:=0 to 9 do  {Определенная область на картинке}
{*}  begin
{*}  for i:=0 to 9 do s[i]:=0;
{*}  for x_:=0 to mask_width-1 do
{*}  for y_:=0 to mask_height-1 do  {Берем по очереди все точки из маски}
{*}  begin
{*}  for i:=0 to 9 do begin   {Подставляем все маски по очереди}
{*}  if (pic[x_+x,y_+y]=masks[i][x_,y_])
{*}  and (masks[i][x_,y_]=1) then s[i]:=s[i]+1; {При совпадении увеличиваем элемент массива на 1    }
{Запоминаем максимальное число совпавших точек для конкретной маски                                 }
{*}  if s[i]>dig[i] then  begin dig[i]:=s[i];pos_x[i]:=x;pos_y[i]:=y; end;
{*}  end;
{*}  end;
{*}  end;
{*}  max:=getmax(dig); {А где же у нас совпало лучше всех?                                          }
{Cледующие строки до комментария "!" можно выкинуть                                                 }
{Здесь для понта рисуются цифры по маскам, в тех позициях, где они были на картинках                }
{*}  for x:=dx to dx+fig_width do
{*}  for y:=0 to pic_height-1 do
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x,y]:=clblack;
{*}  for x:=0 to mask_width-1 do
{*}  for y:=0 to mask_height-1 do
{*}  if masks[max][x,y]=1 then
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x+pos_x[max],y+pos_y[max]]:=$00AAFFAA;
{!}
{Запоминаем самую меньшую вероятность совпадения                                                    }
{*}  if round(100*dig[max]/masks_pix[max])<prob then prob:=round(100*dig[max]/masks_pix[max]);
{*}  label1.Caption:=Label1.Caption+inttostr(max);
{*}  dx:=dx+fig_width; {Сдвигаемся вправо для следущей цифры}
{*}  until dx>=pic_width;


 
Percent   (2006-11-12 23:04) [17]

pavels777
Я тут кое что нашол


Сидят мужики, ловят рыбу. Подваливает ёжик:
- Мужики, у вас изолента есть?
- Нет...
Ёжик уходит, через час возвращается:
- Мужики, я вам изоленту принес!
(С) Анекдот

То есть, зачем ты это тут выложил? Это твой код? Что он должен делать? Что он делает неправильно? Где, по твоему, ошибка?


 
Palladin ©   (2006-11-12 23:05) [18]

:)))


> [15] Percent  


Уже сбились, бо уверены что за две минуты могут сдвинуть гору, только бы подсказали как, а там уж они сами как нибудь... и ведь не переубедить...


 
Ketmar ©   (2006-11-12 23:14) [19]

>[16] pavels777 12-Nov-2006, 23:03
>извеняюсь :)
>{В этой части и происходит распознавание}
это тебя кто-то жестоко обманул.


 
KilkennyCat ©   (2006-11-12 23:17) [20]

Не, ну конкретно для конкретного плоо листа распознаватель, довольно-таки идеальный, за пару дней написать не проблема. Только экономически не выгодно :)


 
pavels777   (2006-11-12 23:17) [21]

ок привожу полный код!

procedure TForm1.Button1Click(Sender: TObject);
begin
{Запускаем диалог и открываем картинку                                                              }
{*}  If OpenPicture.Execute then Image_IN.Picture.LoadFromFile(OpenPicture.FileName);
{---------------------------------------------------------------------------------------------------}
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
OpenPicture.InitialDir:=ExtractFilePath(Application.Exename)+"TESTPICTURES";
end;

procedure TForm1.Button2Click(Sender: TObject);
const mask_height=10; {Высота маски}
     mask_width=8;   {Ширина маски}
     pic_height=20;  {Высота картинки}
     pic_width=48;   {Ширина картинки}
     fig_width=round(pic_width/3); {Третья часть картинки (для трех цифр)}
type mask=array[0..mask_width-1,0..mask_height-1] of byte; {Тип массива для маски}
var masks:array[0..9] of mask; {Массив масок}
   masks_pix:array[0..9] of integer; {Массив для хранения кол-ва белых пикселей для каждой маски}
   pic:array[0..pic_width-1,0..pic_height-1] of byte; {Массив для картинки}
   i,x,y,x_,y_,dx,max,prob:integer;
   dig,s,pos_x,pos_y:array[0..9] of byte; {вспомогательные массивы}
{Функция определения номера максимально совпавшей маски                                             }
{*}  function Getmax(dig:array of byte):byte;
{dig - число совпавших точек для каждой маски                                                       }
{*}  var i,i_:byte;
{*}  a,b:real;
{*}  begin
{*}  a:=0;
{*}  i:=0;
{*}  for i_:=0 to 9 do
{*}  begin
{Вычисляем вероятность совпадения                                                                   }
{*}  b:=dig[i_]/masks_pix[i_];
{*}  if a<b then
{*}  begin
{*}  a:=b;
{*}  i:=i_;
{*}  end;
{*}  end;
{*}  result:=i;
{*}  end;
{---------------------------------------------------------------------------------------------------}

begin
{Загружаем маски в массивы                                                                          }
{*}  for i:=0 to 9 do
{*}  begin
{*}  masks_pix[i]:=0;
{*}  Temp.Picture.LoadFromFile(ExtractFilePath(Application.Exename)+"MASKS\"+InttoStr(i)+".bmp");
{*}  for x:=0 to mask_width-1 do
{*}  for y:=0 to mask_height-1 do
{*}  if Temp.Canvas.Pixels[x,y]=clwhite then
{*}  begin
{*}  masks[i][x,y]:=1;
{*}  masks_pix[i]:=masks_pix[i]+1;
{*}  end
{*}  else masks[i][x,y]:=0;
{*}  end;
{---------------------------------------------------------------------------------------------------}

{Загружаем картинку в массив                                                                        }
{*}  for x:=0 to pic_width-1 do
{*}  for y:=0 to pic_height-1 do
{*}  begin
{*}  if  Image_IN.Canvas.Pixels[x,y]=clwhite then pic[x,y]:=1 else pic[x,y]:=0;
{*}  end;
{---------------------------------------------------------------------------------------------------}

{Подготовка Image_OUT}
{*}  Image_OUT.Picture.Bitmap.Width:=pic_width;
{*}  Image_OUT.Picture.Bitmap.Height:=pic_height;
{---------------------------------------------------------------------------------------------------}

{Очищаем картинку от мусора                                                                         }
{Мусор в данном случае - точки того же цвета, что и цифры                                           }
{*}  for x:=0 to pic_width-1 do
{*}  for y:=0 to pic_height-1 do
{*}  if pic[x,y]=1 then
{*}  begin
{*}  x_:=x;
{*}  y_:=y;
{*}  if x<=-1 then x_:=1;
{*}  if y<=-1 then y_:=1;
{Если нет соседних точек или точка лежит на краях картинки то убираем ее                            }
{Здесь может быть и какой-нибудь другой признак: различие по цвету, например                        }
{*}  if (pic[x_+1,y_]<>1) and   (pic[x_-1,y_]<>1) and
{*}  (pic[x_,y_+1]<>1) and  (pic[x_,y_-1]<>1) and
{*}  (pic[x_+1,y_+1]<>1) and  (pic[x_-1,y_-1]<>1) and
{*}  (pic[x_-1,y_+1]<>1) and (pic[x_+1,y_-1]<>1) then
{*}  pic[x_,y_]:=0;
{*}  end;
{---------------------------------------------------------------------------------------------------}
dx:=0;      {Смещение по горизонтали}
prob:=100; {Начальное значение вероятности успешного распознавания(в %)}
label1.Caption:="";
{В этой части и происходит распознавание}
{*}  repeat
{Обнуляем все массивы}
{*}  for i:=0 to 9 do
{*}  begin
{*}  dig[i]:=0;
{*}  s[i]:=0;
{*}  pos_x[i]:=0;
{*}  pos_y[i]:=0;
{*}  end;
{*}  for x:=dx to dx+mask_width-1 do
{*}  for y:=0 to 9 do  {Определенная область на картинке}
{*}  begin
{*}  for i:=0 to 9 do s[i]:=0;
{*}  for x_:=0 to mask_width-1 do
{*}  for y_:=0 to mask_height-1 do  {Берем по очереди все точки из маски}
{*}  begin
{*}  for i:=0 to 9 do begin   {Подставляем все маски по очереди}
{*}  if (pic[x_+x,y_+y]=masks[i][x_,y_])
{*}  and (masks[i][x_,y_]=1) then s[i]:=s[i]+1; {При совпадении увеличиваем элемент массива на 1    }
{Запоминаем максимальное число совпавших точек для конкретной маски                                 }
{*}  if s[i]>dig[i] then  begin dig[i]:=s[i];pos_x[i]:=x;pos_y[i]:=y; end;
{*}  end;
{*}  end;
{*}  end;
{*}  max:=getmax(dig); {А где же у нас совпало лучше всех?                                          }
{Cледующие строки до комментария "!" можно выкинуть                                                 }
{Здесь для понта рисуются цифры по маскам, в тех позициях, где они были на картинках                }
{*}  for x:=dx to dx+fig_width do
{*}  for y:=0 to pic_height-1 do
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x,y]:=clblack;
{*}  for x:=0 to mask_width-1 do
{*}  for y:=0 to mask_height-1 do
{*}  if masks[max][x,y]=1 then
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x+pos_x[max],y+pos_y[max]]:=$00AAFFAA;
{!}
{Запоминаем самую меньшую вероятность совпадения                                                    }
{*}  if round(100*dig[max]/masks_pix[max])<prob then prob:=round(100*dig[max]/masks_pix[max]);
{*}  label1.Caption:=Label1.Caption+inttostr(max);
{*}  dx:=dx+fig_width; {Сдвигаемся вправо для следущей цифры}
{*}  until dx>=pic_width;
{---------------------------------------------------------------------------------------------------}
label1.Caption:=Label1.Caption+" ("+inttostr(prob)+"%)";
end;



 
Palladin ©   (2006-11-12 23:19) [22]


> ок привожу полный код!

кому? [17] читал?


 
KilkennyCat ©   (2006-11-12 23:21) [23]

нехилые вложенные циклы...


> Здесь для понта рисуются


файнриадер и прочие - вы уволены! вот она - суперо-пуперо-распознавалка!


 
KilkennyCat ©   (2006-11-12 23:23) [24]

Очистка от мусора выполнена по алгоритму игры "Life" :))


 
Palladin ©   (2006-11-12 23:29) [25]


> Очистка от мусора выполнена по алгоритму игры "Life"

%))


 
Gydvin ©   (2006-11-12 23:31) [26]

Если интересно, у Керка или Подгорецкого выложен пример распознования цифр


 
Ketmar ©   (2006-11-12 23:35) [27]

мда. а ведь и я когда-то был таким же молодым и горячим...


 
KilkennyCat ©   (2006-11-12 23:39) [28]

> [26] Gydvin ©   (12.11.06 23:31)

Вау! Керк и Подгорецкий - одно и тоже лицо, оказывается! Теперь все ясно...
:)


> [27] Ketmar ©   (12.11.06 23:35)


А теперь ты старый и холодный :)


 
Gydvin ©   (2006-11-12 23:41) [29]


> KilkennyCat ©   (12.11.06 23:39) [28]
>
> > [26] Gydvin ©   (12.11.06 23:31)
>
> Вау! Керк и Подгорецкий - одно и тоже лицо, оказывается!
>  Теперь все ясно...
> :)

Почему? Волшебное слово - ИЛИ


 
KilkennyCat ©   (2006-11-12 23:42) [30]

> [29] Gydvin ©   (12.11.06 23:41)

вот именно.


 
Palladin ©   (2006-11-12 23:42) [31]

угу... лет 10-12 назад... когда все казалось очевидным... но подобный срез значений я уж никак чисткой шумов не называл... )


 
Gydvin ©   (2006-11-12 23:43) [32]


> > KilkennyCat ©   (12.11.06 23:39) [28]

Можно иногда полностью читать сообщение))


 
Gydvin ©   (2006-11-12 23:44) [33]


> KilkennyCat ©   (12.11.06 23:42) [30]
>
> > [29] Gydvin ©   (12.11.06 23:41)
>
> вот именно.

Ну и....

> Gydvin ©   (12.11.06 23:31) [26]

Читаем заново )))


 
KilkennyCat ©   (2006-11-12 23:44) [34]

> [31] Palladin ©   (12.11.06 23:42)

гы... я в то время пришел к выводу, что можно сделать аналоговый распознаватель :) устройство, типа аналогового ксерокса плюс печатная машинка.


 
Palladin ©   (2006-11-12 23:47) [35]

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

:)))


 
Palladin ©   (2006-11-12 23:48) [36]


> голоса двух человек

произносящих соответственно одну и туже фразу :)


 
Anatoly Podgoretsky ©   (2006-11-12 23:48) [37]

> KilkennyCat  (12.11.2006 23:39:28)  [28]

Так нас уже трое оказывается, ты Кетмаря забыл


 
Gydvin ©   (2006-11-12 23:51) [38]

Чет я не понял, в каком месте начинать смеяться..... где я сказал не так


 
KilkennyCat ©   (2006-11-12 23:53) [39]

> [37] Anatoly Podgoretsky ©   (12.11.06 23:48)

точно... эх, хорошо вам вместе, нескучно...


 
Palladin ©   (2006-11-12 23:55) [40]


> [38] Gydvin ©

ни в каком... народ частично ушел в детство...


 
Ketmar ©   (2006-11-12 23:59) [41]

>[28] KilkennyCat(c) 12-Nov-2006, 23:39
>А теперь ты старый и холодный :)
угу. змей.

>[37] Anatoly Podgoretsky(c) 12-Nov-2006, 23:48
>Так нас уже трое оказывается, ты Кетмаря забыл
да-да. только автор не успел той ветки пояснить, кто из нас виртуал. а если оба -- то чьи.


 
Anatoly Podgoretsky ©   (2006-11-13 00:07) [42]

> Ketmar  (12.11.2006 23:59:41)  [41]

Но зато сказали, что мы железяки.


 
Ketmar ©   (2006-11-13 00:15) [43]

>[42] Anatoly Podgoretsky(c) 13-Nov-2006, 00:07
>Но зато сказали, что мы железяки.
боты, боты... завидуют просто автору алгоритма, вот и ругаются.


 
Gydvin ©   (2006-11-13 00:17) [44]

Это все Матрица


 
Германн ©   (2006-11-13 01:24) [45]


> Anatoly Podgoretsky ©   (12.11.06 23:48) [37]
>
> > KilkennyCat  (12.11.2006 23:39:28)  [28]
>
> Так нас уже трое оказывается, ты Кетмаря забыл
>

Не, ну я ещё могу себе представить Керка отвечающего за АП или за Кетмара (с трудом, но могу). Но вот представить себе АП или Кетмара постящих про футбол!!! Это был-бы полный отпад для меня. :-)


 
pavels777   (2006-11-13 01:31) [46]

Друзья подскажите где я совершил ошибку?
мне надо сравнить две картинки
procedure TForm1.Button3Click(Sender: TObject);
var
Count,x,y,Result:integer;
begin
Count := 0;
for x := 0 to Width-1 do
for y := 0 to Height-1 do
 if (Image3.Canvas.Pixels[x,y] = clblack) and (Image4.Canvas.Pixels[x,y] = clblack)
 then Inc(Count);
Result := Count * 200 div (Count*clblack+Count*clblack);
label4.Caption:= inttostr(Result);
end;


 
KilkennyCat ©   (2006-11-13 01:36) [47]

> for x := 0 to Width-1 do
> for y := 0 to Height-1 do

уже здесь.


 
Германн ©   (2006-11-13 01:37) [48]


> pavels777   (13.11.06 01:31) [46]
>
> Друзья подскажите где я совершил ошибку?

Пост [0]


 
MikePetrichenko ©   (2006-11-13 02:08) [49]


> Пост [0]

Раньше.... Гораздо раньше... В момент выбора профессии/занятия.


 
pavels777   (2006-11-13 02:25) [50]

Я программист в крупной компании!!


 
Ketmar ©   (2006-11-13 02:28) [51]

>[50] pavels777 13-Nov-2006, 02:25
>Я программист в крупной компании!!
несчастная компания... надеюсь, ты там один такой...

хотя что-то мне подсказывает, что "гражданин соврамши", и "крупная компания" (если она есть) называется "дядя вася очень лтд суперсофт".


 
Ketmar ©   (2006-11-13 02:29) [52]

хотя... если идёт компания из 20 человек, и среди них "программист" -- то это тоже "программист в крупной компании"...


 
Германн ©   (2006-11-13 02:30) [53]


> pavels777   (13.11.06 02:25) [50]
>
> Я программист в крупной компании!!
>

Компании явно не повезло. Увы отдел кадров прошляпил. Начальника - на периферию!


 
Ketmar ©   (2006-11-13 02:31) [54]

эх. набросились на человека... что-то я стал сентиментальным. всё-таки автор начал с "уважаемые друзья", а не "дайте код срочно"...
pavels777, ты не обижайся. тебе уже ответили, собственно. дальше пошёл наш обычный трёп.


 
pavels777   (2006-11-13 02:33) [55]

Исправьте пожалуйста где я ошибся?

procedure TForm1.Button3Click(Sender: TObject);

var
Count,x,y,i,Result,chislo:integer;
masks:array[0..5]of integer; {Массив масок}

begin
 for i:=0 to 5 do
 begin
  Image4.Picture.LoadFromFile(ExtractFilePath(Application.Exename)+"22\"+InttoStr(i)+".bmp");

end;
Count := 0;
for x := 0 to Width-1 do
for y := 0 to Height-1 do
 if (Image3.Canvas.Pixels[x,y] = clblack) and (Image4.Canvas.Pixels[x,y] = clblack)
 then Inc(Count);
Result:=(Count div 10);
if (Result >20)
then
chislo:= masks[i];
label4.Caption:= inttostr(chislo);
end;


 
MikePetrichenko ©   (2006-11-13 02:34) [56]


> Я программист в крупной компании!!

Надеюсь, что очень мелкий программист.

P.S. А вдруг он из FineReader???


 
Ketmar ©   (2006-11-13 02:34) [57]

хм. везде.
хинт: все image одинакового размера?
хинт: к чему относятся свойства width и height в циклах?


 
pavels777   (2006-11-13 02:35) [58]

все image одинакового размера


 
MikePetrichenko ©   (2006-11-13 02:36) [59]


> Исправьте пожалуйста где я ошибся?

Вот же упертый...
Раньше надо было исправлять. Смею предположить, что лет так 20-25 назад.


 
pavels777   (2006-11-13 02:37) [60]

:)


 
Ketmar ©   (2006-11-13 02:37) [61]

второй хинт обдумывай.


 
Ketmar ©   (2006-11-13 02:38) [62]

зыж нет, код тут дают редко. тут все жестокие -- заставляют думать и литературу/справку читать...


 
pavels777   (2006-11-13 02:38) [63]

if (Image3.Canvas.Pixels[x,y] = clblack) and (Image4.Canvas.Pixels[x,y] = clblack)
надо заменить на  if (Image3.Canvas.Pixels[x,y] = clblack) and (massiv[i] [x,y] = clblack) ?


 
Германн ©   (2006-11-13 02:39) [64]


>  for i:=0 to 5 do
>  begin
>   Image4.Picture.LoadFromFile(ExtractFilePath(Application.
> Exename)+"22\"+InttoStr(i)+".bmp");
>
> end;

Может мне кто-нибудь объяснит смысл сего действа!


 
MikePetrichenko ©   (2006-11-13 02:39) [65]


> pavels777   (12.11.06 22:39)  

Почитай для начала теорию по распознаванию образов и т.п.


 
pavels777   (2006-11-13 02:40) [66]

есть 6 картинок  их надо загнать в масив, а потом сравнит с изображением.


 
Германн ©   (2006-11-13 02:42) [67]


> pavels777   (13.11.06 02:40) [66]
>
> есть 6 картинок  их надо загнать в масив, а потом сравнит
> с изображением.
>

А массив-то где?


 
MikePetrichenko ©   (2006-11-13 02:42) [68]


> эх. набросились на человека... что-то я стал сентиментальным.
>  всё-таки автор начал с "уважаемые друзья", а не "дайте
> код срочно"...
> pavels777, ты не обижайся. тебе уже ответили, собственно.
>  дальше пошёл наш обычный трёп.


Ну все... Пристыдил. Будем код смотреть:

> for i:=0 to 5 do
>  begin
>   Image4.Picture.LoadFromFile(ExtractFilePath(Application.
> Exename)+"22\"+InttoStr(i)+".bmp");
>
> end;

Бред какой-то. Я даже с недосыпу такое не напишу. Вдумайся, что сие делает.


> for x := 0 to Width-1 do
> for y := 0 to Height-1 do

Врядли хорошая идея прать размер формы и сравнивать Image.


 
Ketmar ©   (2006-11-13 02:42) [69]

>[66] pavels777 13-Nov-2006, 02:40
>есть 6 картинок  их надо загнать в масив, а потом сравнит
>с изображением.
таки не угадал. ты загружаешь в image ОДНУ картинку. последнюю. потому что массивом там и не пахнет.

>[65] MikePetrichenko(c) 13-Nov-2006, 02:39
>Почитай для начала теорию по распознаванию образов и т.п.
решил избавиться от автора кардинально и надолго? %-)


 
pavels777   (2006-11-13 02:43) [70]

masks:array[0..5]of integer; {Массив масок}
> Германн


 
MikePetrichenko ©   (2006-11-13 02:48) [71]


> masks:array[0..5]of integer; {Массив масок}

Простое объявление массива не освобождает тебя от обязанности его заполнить.

Компилятор еще не снабдили телепатором (хотя можешь пользовать идею для следующего проекта).

И врядли картинки будут иметь тип Integer (хотя можно CRC посчитать).


 
Ketmar ©   (2006-11-13 02:49) [72]

и где этот массив упоминается в первом цикле?


 
MikePetrichenko ©   (2006-11-13 02:50) [73]


> решил избавиться от автора кардинально и надолго? %-)

Уже не получится... Автор выжил.


 
Gydvin ©   (2006-11-13 06:33) [74]


>  if (Image3.Canvas.Pixels[x,y] = clblack) and (Image4.Canvas.
> Pixels[x,y] = clblack)
>  then Inc(Count);
> Result:=(Count div 10);

Мдя... Timage, Pixels[x,y]....
Tbitmap и scanline рулят )))


 
Anatoly Podgoretsky ©   (2006-11-13 07:45) [75]

> Германн  (13.11.2006 1:24:45)  [45]

Не напрашиваяся


 
LexXL ©   (2006-11-13 12:56) [76]

извените вопрос не в тему но не молгибы вы напомнить мне условия алгоритма игры life, давно хотел развлечься  :)


 
LexXL ©   (2006-11-13 13:06) [77]

http://www.diploms.com/inf/teor_inf.htm - но там "теория"(платная правда можешь обратиться к яше за free)

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


 
clickmaker ©   (2006-11-13 13:07) [78]

Хм.. распознавание текста в начинающих?
Жесткие, однако, требования к нынешней молодежи...


 
KilkennyCat ©   (2006-11-13 13:11) [79]

> [76] LexXL ©   (13.11.06 12:56)

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


 
Kolan ©   (2006-11-13 13:11) [80]

> Коля, давай ты будешь излагать только то, в чем ты совершенно
> уверен в теории и на практике.

Давай, только какраз на практике в прошлом году нам задавали делать распознание текста(букв) разными методами. Втч шаблоном, нейро сетью ... Так что такие лабы бывают, делается за день.

Понятно что не конкурент FineFeader и распознает фигово. Но для того, чтобы в голове отложилось как это вообще делают достаточно...


 
MikePetrichenko ©   (2006-11-13 13:12) [81]


> Хм.. распознавание текста в начинающих?
> Жесткие, однако, требования к нынешней молодежи...

Да нет, автор профессией ошибся, а сюда поместили, чтобы другим неповадно было.


 
LexXL ©   (2006-11-13 13:13) [82]

Пасиб :) ща буду творить ....


 
Anatoly Podgoretsky ©   (2006-11-13 13:43) [83]

> MikePetrichenko  (13.11.2006 13:12:21)  [81]

Почему в наказание?
Как раз по делу, автор начинающий в данной области

--


 
MikePetrichenko ©   (2006-11-13 14:04) [84]


> Почему в наказание?
> Как раз по делу, автор начинающий в данной области

IMHO, у него уровень начинающего программиста, а не программиста, начинающего писать распознавалку образов.


 
Anatoly Podgoretsky ©   (2006-11-13 14:33) [85]

> MikePetrichenko  (13.11.2006 14:04:24)  [84]

Ну это очень мягко, но пойдет.

--



Страницы: 1 2 3 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.71 MB
Время: 0.046 c
15-1163273225
Anatoly Podgoretsky
2006-11-11 22:27
2006.12.03
Ура, закончил - конечная версия APC


15-1163749228
TohaNik
2006-11-17 10:40
2006.12.03
Вот они, те кто влияет на неокрепшие души.


3-1159414596
Frozzen
2006-09-28 07:36
2006.12.03
Список таблиц Access?


1-1161170320
Виталий Панасенко
2006-10-18 15:18
2006.12.03
Вставка в таблицу Excel формулы


15-1163285673
lookin
2006-11-12 01:54
2006.12.03
ISO - напомните плз, какой программой его можно превратить в AVI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский