Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.72 MB
Время: 0.055 c
6-1152708209
bobah
2006-07-12 16:43
2006.12.03
Как лучше реализовывать архитектуру клиент-сервер


15-1163474121
Slider007
2006-11-14 06:15
2006.12.03
С днем рождения ! 14 ноября


1-1161172159
AlexEgorov
2006-10-18 15:49
2006.12.03
Почему в всех дельфи приложений не полное системное меню,


2-1163664385
неумейка
2006-11-16 11:06
2006.12.03
Фон StringGrig с перетеканием цвета


1-1161192067
i-am-vladko
2006-10-18 21:21
2006.12.03
TWebBrowser dynamic create