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

Вниз

Поганое изображение.   Найти похожие ветки 

 
ZMRaven ©   (2007-08-22 12:04) [0]

Всем привет :)

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

можно ли как-нибудь в этой ситуации переделать изображение?


 
режиссер   (2007-08-22 12:23) [1]

конечно можно


 
ZMRaven ©   (2007-08-22 12:26) [2]

классный у тебя ник :)...как раз в тему.
и как сие сотворить ? :)


 
режиссер   (2007-08-22 12:28) [3]

ты хочешь "как-нибудь переделать изображение" ?
И в чем же проблемы?
Нарисуй черный крест поверх всего кадра и будет тебе счастье.
Изображение "как-нибудь переделается".


 
ZMRaven ©   (2007-08-22 12:30) [4]

точно :)...я же не уточнил , спасибо, что подсказал :)

можно ли повысить качество того изображения? сделать его чётче и контрастнее


 
режиссер   (2007-08-22 12:31) [5]

конечно можно


 
ZMRaven ©   (2007-08-22 12:33) [6]

и как же это сделать ? :)


 
режиссер   (2007-08-22 13:17) [7]

Фильтрами виртуал дуба


 
Pavia ©   (2007-08-22 15:33) [8]

Можно и без дуба. Ручками, дэкодировать изоброжение, и повысеть контрасность, резкость. А потом обратно сжать.

Надеюсь как работать с видео файлами разберешься сам.

Конрасность

Для того чтобы произвести корекцию контрасности изоброжения нужно выровнить по трем уровням R,G,B. Припомощи линейного растяжения интенсивностий.
Делается это так ищем минимумы и максимумы по трем состовляющим.
RMin, RMax, GMin, GMax, BMin, BMax

(R-RMin)*(255-0)/(RMax-RMin)
(G-GMin)*(255-0)/(GMax-GMin)
(B-BMin)*(255-0)/(BMax-BMin)

R,G,B -знначение в точке

Можно, сделать немного иначе посчитать
(R-YMin)*(255-0)/(YMax-YMin)
(G-YMin)*(255-0)/(YMax-YMin)
(B-YMin)*(255-0)/(YMax-YMin)

Где
YMax максимальная интенсивность
YMin минимальная интенсивность.

p:=bp.ScanLine[0];
Y:=p[0];
YMax:= Y;
YMin:= Y;

for i:=0 to bp.Height-1 do
begin
p:=bp.ScanLine[i];
for j:=0 to bp.Width*3-1 do
begin
Y:=p[j];
if Y>YMax then YMax:=Y;
if Y<YMin then YMin:=Y;
end;
end;

for i:=0 to bp.Height-1 do
begin
p:=bp.ScanLine[i];
for j:=0 to bp.Width-1 do
begin
B:=Round((p[j*3+0]-YMin)*255 / (YMax-YMin));
G:=Round((p[j*3+1]-YMin)*255 / (YMax-YMin));
R:=Round((p[j*3+2]-YMin)*255 / (YMax-YMin));
p[j*3+0]:=B;
p[j*3+1]:=G;
p[j*3+2]:=R;
end;
end;


Тут без оптимизации. Деление можно заменить умножением. Вернее тут просто деление вынести из цикла.

Если владеешь ассемблером, можно и на MMX, SSE переписать.

Резкость.

Получается из размытия.
Fs(x,y)=A*F(x,y)-Fb(x,y)
Fs - изоброжение с повышенной резкостью
Fb - размытое исходное
A - коэфицент усиления >=1, при больших значениях у фильтра резко падает эффективность.

Пример состовления матрицы, на основе Гаусовского размытия.

s:=n/3;
for i:=-n to +n do
for j:=-n to +n do
 _Mask[i,j]:=-1/(2*pi*s*s)*exp((-i*i-j*j)/(2*s*s));
_Mask[0,0]:=A+_Mask[0,0];



Или использовать следующии матрицы
0  -1    0
-1 A+4  -1
0  -1    0

-1  -1   -1
-1 A+8  -1
-1  -1   -1

А фильтр применяется просто через свертку.
В каждой точке перемножаем значение пикселей, на матрицу и суммируем.
Сумму, делим на маштабирующий коэфицент. Тут везде он равен 1.
Результат заносим в новое изоброжение. По краях не существующии точки принемаются за 0.

procedure TForm1.Button2Click(Sender: TObject);
var i,j,ii,jj:Integer;
Bp,Bp1:TBitmap;
a:array of PByteArray;
p:PByteArray;
R,G,B:Real;
begin
GetMask;
Bp:=TBitmap.Create;
Bp.PixelFormat:=pf24bit;
Bp.Width:=Image1.Picture.Bitmap.Width+n+n;
Bp.Height:=Image1.Picture.Bitmap.Height+n+n;
Bp.Canvas.Draw(n,n,Image1.Picture.Bitmap);

Bp1:=TBitmap.Create;
Bp1.PixelFormat:=pf24bit;
Bp1.Width:=Image1.Picture.Bitmap.Width;
Bp1.Height:=Image1.Picture.Bitmap.Height;

SetLength(a,2*n+1);
for i:=1 to 2*n do
a[i]:=Bp.ScanLine[i-1];

for i:=0 to Bp1.Height-1 do
 begin
 move(a[1],a[0],4*2*n);
 a[Length(a)-1]:= Bp.ScanLine[i+2*n];
 p:= Bp1.ScanLine[i];
 for j:=0 to Bp1.Width-1 do
  begin
  R:=0;
  G:=0;
  B:=0;
  for ii:=0 to 2*n do
    for jj:=0 to 2*n do
     begin
     R:=R+a[ii,(j+jj)*3+0]*_Mask[ii-n,jj-n];
     G:=G+a[ii,(j+jj)*3+1]*_Mask[ii-n,jj-n];
     B:=B+a[ii,(j+jj)*3+2]*_Mask[ii-n,jj-n];
     end;
  if R>255 then R:=255;
  if R<0 then R:=0;
  if G>255 then G:=255;
  if G<0 then G:=0;
  if B>255 then B:=255;
  if B<0 then B:=0;
  p[j*3+0]:=Round(R);
  p[j*3+1]:=Round(G);
  p[j*3+2]:=Round(B);
 end;
 end;
Image2.Canvas.Draw(0,0,Bp1);
SetLength(a,0);
Bp1.Free;
bp.Free;
end;


С сылки:
http://student.kuleuven.be/~m0216922/CG/filtering.html
http://sources.ru/magazine/0805/paint.html


 
Pavia ©   (2007-08-22 15:36) [9]

Тут я описал изменения авто контраст.
А контрасть изменяется иначе. Смотри  ссылки выше.



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

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

Наверх




Память: 0.47 MB
Время: 0.006 c
15-1221794968
ganda
2008-09-19 07:29
2008.11.16
BlackfishSQL что за база и с чем её едят!?


15-1221799104
desc
2008-09-19 08:38
2008.11.16
HastNameAndIP


2-1223399808
MZG
2008-10-07 21:16
2008.11.16
Помогите пожалуйста с запросом


2-1223535329
engine
2008-10-09 10:55
2008.11.16
WebServices


2-1222847653
SkyN
2008-10-01 11:54
2008.11.16
несколько раз вызывать EnterCriticalSection корректно?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский