D2: Win95 + Speaker + Sound := possible

本文深入探讨了音视频处理领域的关键技术,包括图像色彩空间、视频编解码算法、音频编解码算法等,并介绍了FFmpeg音视频编解码、硬件编解码、音频处理滤波等实际应用。
procedure Sound(Freq : Word);
var B : Byte;
begin if Freq > 18 then begin Freq := Word(1193181 div LongInt(Freq));
 B := Byte(GetPort($61));
 if (B and 3) = 0 then begin SetPort($61, Word(B or 3));
 SetPort($43, $B6);
 end;
 SetPort($42, Freq);
 SetPort($42, Freq shr 8);
 end;
end;
procedure NoSound;
var Value: Word;
begin Value := GetPort($61) and $FC;
 SetPort($61, Value);
end;
procedure SetPort(address, Value:Word);
var bValue: byte;
begin bValue := trunc(Value and 255);
 asm mov dx, address mov al, bValue out dx, al end;
end;
function GetPort(address:word):word;
var bValue: byte;
begin asm mov dx, address in al, dx mov bValue, al end;
 GetPort := bValue;
end;

def demosaic_green(mosaic, k = 0.05): ''' demozaicarea planului verde prin aplicarea unei functii logistice variatiilor pe orizontala respectiv verticala ''' height,width= np.shape(mosaic) # adaugam margini p = 3 padded = np.zeros([height+2*p,width+2*p]) padded[p:height+p,p:width+p] = mosaic.copy() # extragem canalul de verde din mozaic green_true = np.zeros(np.shape(padded)) green_true[p:height+p:2,p:width+p:2] = mosaic[::2,::2] green_true[p+1:height+p:2,p+1:width+p:2] = mosaic[1::2,1::2] # calculam valoarea maxima respectiv minima pentru a normaliza la final imaginea all_green_values = np.concatenate([mosaic[::2,::2].flatten(),mosaic[1::2,1::2].flatten()]) g_max, g_min = np.max(all_green_values), np.min(all_green_values) # initializam derivatele verticale/orizontale de ordin 1/2 horizontal_d1 = np.zeros(np.shape(padded)) vertical_d1 = np.zeros(np.shape(padded)) vertical_d1 = np.zeros(np.shape(padded)) horizontal_d2 = np.zeros(np.shape(padded)) vertical_d2 = np.zeros(np.shape(padded)) horizontal_mean = np.zeros(np.shape(padded)) vertical_mean = np.zeros(np.shape(padded)) # (1) # derivata orizontala de ordin 1 in pozitiile R si B horizontal_d1[p:height+p, p:width+p] = (padded[p:height+p, p+1:width+p+1] - padded[p:height+p, p-1:width+p-1]) / 2 # derivata verticala de ordin 1 in pozitiile R si B vertical_d1[p:height+p, p:width+p] = (padded[p+1:height+p+1, p:width+p] - padded[p-1:height+p-1, p:width+p]) / 2 # derivata orizontala de ordin 2 in pozitiile R si B horizontal_d2[p:height+p, p:width+p] = (padded[p:height+p, p+2:width+p+2] + padded[p:height+p, p-2:width+p-2] - 2*padded[p:height+p, p:width+p]) / 4 # derivata verticala de ordin 2 in pozitiile R si B vertical_d2[p:height+p, p:width+p] = (padded[p+2:height+p+2, p:width+p] + padded[p-2:height+p-2, p:width+p] - 2*padded[p:height+p, p:width+p]) / 4 # (2) # calculam variatiile pe orizontala si verticala horizontal_variation = np.abs(horizontal_d1) + np.abs(2*np.square(horizontal_d2)) vertical_variation = np.abs(vertical_d1) + np.abs(2*np.square(vertical_d2)) # (3) # calculam mediile valorilor de verde vecine pe orizontala si verticala in pozitiile R/B # media orizontala in pozitiile R pe randuri pare horizontal_mean[p:height+p:2, p+1:width+p:2] = (padded[p:height+p:2, p+2:width+p+1:2] + padded[p:height+p:2, p:width+p-1:2]) / 2 # media orizontala in pozitiile B pe randuri impare horizontal_mean[p+1:height+p:2, p:width+p:2] = (padded[p+1:height+p:2, p+1:width+p+1:2] + padded[p+1:height+p:2, p-1:width+p-1:2]) / 2 # media verticala in pozitiile R pe randuri pare vertical_mean[p:height+p:2, p+1:width+p:2] = (padded[p+1:height+p+1:2, p+1:width+p:2] + padded[p-1:height+p-1:2, p+1:width+p:2]) / 2 # media verticala in pozitiile B pe randuri impare vertical_mean[p+1:height+p:2, p:width+p:2] = (padded[p+2:height+p+1:2, p:width+p:2] + padded[p:height+p-1:2, p:width+p:2]) / 2 # (13) # aplicarea functiei logistice pentru determinarea valorilor de verde omega_h = 1 / (1 + np.exp(k*(horizontal_variation - vertical_variation))) # (8) estimated_green = omega_h * (horizontal_mean - horizontal_d2) + (1-omega_h) * (vertical_mean - vertical_d2) # suprascrierea valorilor de verde cunoscute in planul estimat estimated_green[p:height+p:2, p:width+p:2] = green_true[p:height+p:2,p:width+p:2] estimated_green[p+1:height+p:2, p+1:width+p:2] = green_true[p+1:height+p:2, p+1:width+p:2] estimated_green = estimated_green.clip(g_min,g_max) return estimated_green[p:height+p, p:width+p], omega_h[p:height+p, p:width+p]转成c++代码并进行详细注释
最新发布
11-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值