-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfindMatchSplit.m
77 lines (53 loc) · 2 KB
/
findMatchSplit.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
%对大图的某个chunk,寻找一个RGB最适合的小图,并做一些修改,让他们的RGB平均值相等。
function [ matchSplit, picsCellTemp ] = findMatchSplit(mergePicSplit, picsCellTemp, picsCell)
R = mergePicSplit(:,:,1);
G = mergePicSplit(:,:,2);
B = mergePicSplit(:,:,3);
mergePicSplitAvg = [mean(R(:)), mean(G(:)), mean(B(:))];
if (size(picsCellTemp,2)>0) % 还有图片 没用完
distMin = 1000;
matchSplit = {};
i = 1;
for i = 1:size(picsCellTemp, 2)
distTemp = Distance(mergePicSplitAvg, picsCellTemp{1, i});
if (distTemp<10)
matchSplit = picsCellTemp{1, i};
break
elseif(distTemp<distMin)
distMin = distTemp;
matchSplit = picsCellTemp{1, i};
end
end
picsCellTemp(i) = []; %删掉已经使用的元素
matchSplit = Transform(mergePicSplitAvg, matchSplit);
return
else % 图片已经用完了
distMin = 1000;
matchSplit = {};
for i = 1:size(picsCell, 2)
distTemp = Distance(mergePicSplitAvg, picsCell{1, i});
if (distTemp<10)
matchSplit = picsCell{1, i};
break;
elseif(distTemp<distMin)
distMin = distTemp;
matchSplit = picsCell{1, i};
end
end
matchSplit = Transform(mergePicSplitAvg, matchSplit);
return
end
end
function [dist] = Distance(mergePicSplitAvg, cellSplit)
dist = abs(mergePicSplitAvg(1)-cellSplit{2}(1))+abs(mergePicSplitAvg(2)-cellSplit{2}(2))+abs(mergePicSplitAvg(3)-cellSplit{2}(3));
end
function [matchSplit] = Transform(mergePicSplitAvg, cellSplit)
dR = mergePicSplitAvg(1)-cellSplit{2}(1);
dG = mergePicSplitAvg(2)-cellSplit{2}(2);
dB = mergePicSplitAvg(3)-cellSplit{2}(3);
% 减
cellSplit{1}(:,:,1) = cellSplit{1}(:,:,1)+dR;
cellSplit{1}(:,:,2) = cellSplit{1}(:,:,2)+dG;
cellSplit{1}(:,:,3) = cellSplit{1}(:,:,3)+dB;
matchSplit = cellSplit{1};
end