HTML 5ÖÐµÄ canvas ÔªËØÊÇÏ൱ǿ´óµÄ£¬ÀûÓÃËûµÄ getImageData ·½·¨¿ÉÒÔ¶ÔÔØÈëµÄͼÏñÖ±½Ó½øÐÐλͼ²Ù×÷¡£µ«ÊÇÖ±½Ó¶Ôλͼ½øÐвÙ×÷±È½ÏÂé·³£¬Èç¹ûÀûÓþí»ý¾ØÕóÕâ¸ö¹¤¾ßµÄ»°£¬¿ÉÒÔͨ¹ý¼¸¸ö¼òµ¥µÄ²ÎÊýʵÏÖ¸´ÔÓµÄЧ¹û¡£
ËùνµÄ¾ØÕóµÄ¾í»ý£¬¾ÍÊÇÈçÏÂͼÏÔʾµÄÄÇÑù£¬µ±¼ÆËãºìÉ«¿òÖеÄÊýÖµµÄʱºò£¬·Ö±ðÏÈÌáÈ¡ÖÜΧÂÌ¿òÖÐ8¸öÊý×Ö£¬È»ºóÓëÊ©¼ÓµÄÄǸö¾ØÕóÖжÔӦλÖÃÏà³Ë£¬È»ºó°Ñ¸÷¸ö³Ë»ý¼ÓÔÚÒ»Æð£¬¾ÍµÃµ½ÁË×îÖÕµÄÖµÁË¡£
±ÈÈçÉÏͼÖеÄ42ÊÇÕâôÀ´µÄ:
(40*0)+(42*1)+(46*0)
+ (46*0)+(50*0)+(55*0)
+ (52*0)+(56*0)+(58*0)
= 42
Õâ¾ÍÊǾí»ýÁË¡£È»ºó£¬ËùνµÄ¶ÔͼÏñµÄ¾í»ý²Ù×÷£¬¾ÍÊÇÖ¸¶ÔͼÏñÉϵÄÿһµãµÄÏñËØÖµ£¬ÓÃÕâ¸ö¾ØÕó½øÐÐÔËË㣬µÃµ½Ò»¸öеÄÖµ¡£
±ÈÈçÏÂÃæÕâÕÅͼ
ÀûÓÃÏÂÃæÕâ¸ö¾ØÕó
-6 -3 0
-3 -1 3
0 3 6
¾ÍÁ¢¿ÌÄܹ»µÃµ½¸¡µñЧ¹û¡£
È»ºóΪÁËʹÓøü·½±ã£¬Í¨³£»¹»á¸ø×îÖÕÖµ³ýÒÔÒ»¸öϵÊýÒÔ¼°¼ÓÉÏÒ»¸öÆ«ÒÆ¡£
±ÈÈçÏÂÃæÕâ¸ö¾ØÕó¡£
0 0 0
0 1 0
0 0 0
Õâ¸ö¾ØÕó£¨Êµ¼ÊÉÏÕâ¸ö¾ØÕó±¾Éí²»¶ÔͼÏñ½øÐÐÈκβÙ×÷£©£¬È»ºóÉèÖÃϵÊýΪ-1£¬Æ«ÒÆÎª255µÄ»°£¬¾ÍÄÜʵÏÖ·´É«Ð§¹ûÁË£¬ÕæÊÇÏ൱µÄÉñÆæ¡£
ΪÁ˼ò»¯²Ù×÷£¬ÎÒдÁ˸ö¼òµ¥µÄº¯ÊýÀ´¶ÔͼÏñÊý¾Ý½øÐвÙ×÷¡£
º¯ÊýµÚÒ»¸ö²ÎÊýÊÇ canvasÉ쵀 imageData ¶ÔÏó
µÚ¶þ¸ö²ÎÊýÊÇ´«Èë¾ØÕóËù¶ÔÓ¦µÄÊý×飬Èç¹ûÊÇÏÂÃæÕâÑùµÄ¾ØÕó
a b c
d e f
g h i
Ôò´«ÈëµÚ¶þ¸öµÄ²ÎÊýӦΪ [a,b,c,d,e,f,g,h,i]
µÚÈý¸ö²ÎÊýÊdzýÊýÒò×Ó¡£
µÚËĸö²ÎÊý¾ÍÊÇÆ«ÒÆÁ¿¡£
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// ¼ÆËã¾í»ý¾ØÕóµÄº¯Êý
function ConvolutionMatrix(input, matrix, divisor, offset){
// ´´½¨Ò»¸öÊä³öµÄ imageData ¶ÔÏó
var output = document.createElement("canvas")
.getContext('2d').createImageData(input);
var w = input.width, h = input.height;
var iD = input.data, oD = output.data;
var m = matrix;
// ¶Ô³ýÁ˱ßÔµµÄµãÖ®ÍâµÄÄÚ²¿µãµÄ RGB ½øÐвÙ×÷£¬Í¸Ã÷¶ÈÔÚ×îºó¶¼ÉèΪ 255
for (var y = 1; y < h-1; y += 1) {
for (var x = 1; x < w-1; x += 1) {
for (var c = 0; c < 3; c += 1) {
var i = (y*w + x)*4 + c;
oD[i] = offset
+(m[0]*iD[i-w*4-4] + m[1]*iD[i-w*4] + m[2]*iD[i-w*4+4]
+ m[3]*iD[i-4] + m[4]*iD[i] + m[5]*iD[i+4]
+ m[6]*iD[i+w*4-4] + m[7]*iD[i+w*4] + m[8]*iD[i+w*4+4])
/ divisor;
oD[(y*w + x)*4 + 3] = 255; // ÉèÖÃ͸Ã÷¶È
return output;
|
ÎÒÕâÀïֻдÁ˸ö3½×µÄ¾í»ý¾ØÕó¡£Èç¹û¾õµÃ²»¹»high»¹¿ÉÒÔ×Ô¼ºÊµÏÖÒ»¸ö5½×µÄ¡£
¡¡