Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > обработка изображений


Автор: tHE_EGOiSTE 9.3.2008, 00:44
Привет всем! 

Возникла необходимость в алгоритме бинаризации цветного изображения (то есть только 2 цвета: чёрный и белый). 
Одна проблема: на исходном цветном изображении присутствуют тени и блики. Поэтому неоходимо провести бинаризацию с удалением теней и бликов(или хотя бы как то уменьшить их), чтоб на итоговой картинке они не придавали утолщения контуру детали изображения и не создавали бы на итоговом бинарном изображении дырок. 

Кто нибудь что-нибудь похожее делал? Помогите пожалуйста реализовать... 

Заранее благодарен!

Автор: Fiyanov 18.3.2008, 08:43
Как насчёт сделать порог для точки? если допустим её значение меньше 200 то сделать её белой. Тогда получиться что серые тона уйдут с чёрно белого изображения. ТОка это будет попиксельно а значит медленно.

Автор: edevil 22.3.2008, 09:43
пишу дипломный проект связанный тоже с графикой и распозновании объектов... предлогая сделать так... найди среденее значение яркости на изображении и самые яркие точки (блики и засветы) и потом просто прировняй их... (p.s.:думаю что должно сработать!) 

по яркости...
Код

var
h,Max,Min:integer;  //интенсивность пиксела,максимальная интенсивная яркость пиксела
i,j:integer;
v,sh:integer;
xc,yc,xcm,ycm:integer; //координат минимума и максимума яркости
begin
xc:=0;
yc:=0;
sh:=306;//ширина кадра
v:=229;//высота кадра
Max:=0;
h:=0;
//----------выявление максимума  яркости-----------
    for i:=1 to sh do
    begin
          for j:=1 to v do
          begin
            h:=round(Image1.Picture.Bitmap.Canvas.Pixels[i,j]/65793);

            if (h>Max) then
                        begin
                        Max:=h;
                         edit5.Text:=IntToStr(h);
                        xc:=i; //присваиваем координаты максимума
                        yc:=j; //яркости
                        end;
          end;
    end;
    //----------выявление минимума  яркости-----------
    for i:=1 to sh do
    begin
          for j:=1 to v do
          begin
            h:=round(Image1.Picture.Bitmap.Canvas.Pixels[i,j]/65793);

            if (h<Min) then
                        begin
                        Min:=h;
                         edit9.Text:=IntToStr(h);
                        xcm:=i; //присваиваем координаты м
                        ycm:=j; //минимума
                        end;
          end;


p.s.:если получиться бинаризация выложи пожалуйста код сюда или пришли в личку  smile 

Автор: ivan219 22.3.2008, 11:48
Можно через ScanLine тоже по пиксельный доступ только быстрее.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)