Skip to content

Commit fe2c83d

Browse files
committed
address some bugs of interpolating missing red/blue values of green samples
1 parent 98419c7 commit fe2c83d

File tree

5 files changed

+136
-70
lines changed

5 files changed

+136
-70
lines changed

Demosaic/src/DW_Kn.asv

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
function Kn = DW_Kn(neighborhoodData, directionNum, rawFlag, needChannel, channelDeal, channelAdded)
2+
% DW_Kn.m get rawData from HiRawImage
3+
% Input:
4+
% neighborhoodData the data of neighborhood range
5+
% directionNum the num of direction
6+
% rawFlag 1: the data is Raw
7+
% 0: the data is not Raw
8+
% needChannal 1: R is in Raw, need to add B
9+
% 0: B is in Raw, need to add R
10+
% Output:
11+
% Wn The weignt of each direction
12+
% Instructions:
13+
% author: wtzhu
14+
% e-mail: wtzhu_13@163.com
15+
% Last Modified by wtzhu v1.0 2022-01-23
16+
% Note:
17+
if nargin < 3
18+
channelDeal = 1;
19+
channelAdded = 1;
20+
end
21+
Kn = zeros(directionNum, 1);
22+
[h, w, c] = size(neighborhoodData);
23+
centerH = round(h/2);
24+
centerW = round(w/2);
25+
if rawFlag
26+
Kn(1) = neighborhoodData(centerH, centerW-1) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH, centerW-2)) / 2;
27+
Kn(2) = neighborhoodData(centerH-1, centerW) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH-2, centerW)) / 2;
28+
Kn(3) = neighborhoodData(centerH, centerW+1) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH, centerW+2)) / 2;
29+
Kn(4) = neighborhoodData(centerH+1, centerW) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH+2, centerW)) / 2;
30+
31+
Kn(5) = neighborhoodData(centerH-1, centerW-2) - (neighborhoodData(centerH-2, centerW-2) + neighborhoodData(centerH, centerW-2)) / 2;
32+
Kn(6) = neighborhoodData(centerH-2, centerW-1) - (neighborhoodData(centerH-2, centerW-2) + neighborhoodData(centerH-2, centerW)) / 2;
33+
Kn(7) = neighborhoodData(centerH-2, centerW+1) - (neighborhoodData(centerH-2, centerW) + neighborhoodData(centerH-2, centerW+2)) / 2;
34+
Kn(8) = neighborhoodData(centerH-1, centerW+2) - (neighborhoodData(centerH-2, centerW+2) + neighborhoodData(centerH, centerW+2)) / 2;
35+
Kn(9) = neighborhoodData(centerH+1, centerW+2) - (neighborhoodData(centerH+2, centerW+2) + neighborhoodData(centerH, centerW+2)) / 2;
36+
Kn(10) = neighborhoodData(centerH+2, centerW+1) - (neighborhoodData(centerH+2, centerW+2) + neighborhoodData(centerH+2, centerW)) / 2;
37+
Kn(11) = neighborhoodData(centerH+2, centerW-1) - (neighborhoodData(centerH+2, centerW-2) + neighborhoodData(centerH+2, centerW)) / 2;
38+
Kn(12) = neighborhoodData(centerH+1, centerW-2) - (neighborhoodData(centerH+2, centerW-2) + neighborhoodData(centerH, centerW-2)) / 2;
39+
else
40+
switch directionNum
41+
case 12
42+
Kn(1) = neighborhoodData(centerH, centerW-1, 2) - neighborhoodData(centerH, centerW-1, channelAdded);
43+
Kn(2) = neighborhoodData(centerH-1, centerW, 2) - neighborhoodData(centerH-1, centerW, channelAdded );
44+
Kn(3) = neighborhoodData(centerH, centerW+1, 2) - neighborhoodData(centerH, centerW+1, channelAdded);
45+
Kn(4) = neighborhoodData(centerH+1, centerW, 2) - neighborhoodData(centerH+1, centerW, channelAdded);
46+
47+
Kn(5) = neighborhoodData(centerH-1, centerW-2, 2) - neighborhoodData(centerH-1, centerW-2, channelAdded);
48+
Kn(6) = neighborhoodData(centerH-2, centerW-1) - (neighborhoodData(centerH-2, centerW-2) + neighborhoodData(centerH-2, centerW)) / 2;
49+
Kn(7) = neighborhoodData(centerH-2, centerW+1) - (neighborhoodData(centerH-2, centerW) + neighborhoodData(centerH-2, centerW+2)) / 2;
50+
Kn(8) = neighborhoodData(centerH-1, centerW+2) - (neighborhoodData(centerH-2, centerW+2) + neighborhoodData(centerH, centerW+2)) / 2;
51+
Kn(9) = neighborhoodData(centerH+1, centerW+2) - (neighborhoodData(centerH+2, centerW+2) + neighborhoodData(centerH, centerW+2)) / 2;
52+
Kn(10) = neighborhoodData(centerH+2, centerW+1) - (neighborhoodData(centerH+2, centerW+2) + neighborhoodData(centerH+2, centerW)) / 2;
53+
Kn(11) = neighborhoodData(centerH+2, centerW-1) - (neighborhoodData(centerH+2, centerW-2) + neighborhoodData(centerH+2, centerW)) / 2;
54+
Kn(12) = neighborhoodData(centerH+1, centerW-2) - (neighborhoodData(centerH+2, centerW-2) + neighborhoodData(centerH, centerW-2)) / 2;
55+
case 4
56+
if needChannel
57+
Kn(1) = neighborhoodData(centerH-1, centerW-1, 2) - neighborhoodData(centerH-1, centerW-1, 3);
58+
Kn(2) = neighborhoodData(centerH-1, centerW+1, 2) - neighborhoodData(centerH-1, centerW+1, 3);
59+
Kn(3) = neighborhoodData(centerH+1, centerW+1, 2) - neighborhoodData(centerH+1, centerW+1, 3);
60+
Kn(4) = neighborhoodData(centerH+1, centerW-1, 2) - neighborhoodData(centerH+1, centerW-1, 3);
61+
else
62+
Kn(1) = neighborhoodData(centerH-1, centerW-1, 2) - neighborhoodData(centerH-1, centerW-1, 1);
63+
Kn(2) = neighborhoodData(centerH-1, centerW+1, 2) - neighborhoodData(centerH-1, centerW+1, 1);
64+
Kn(3) = neighborhoodData(centerH+1, centerW+1, 2) - neighborhoodData(centerH+1, centerW+1, 1);
65+
Kn(4) = neighborhoodData(centerH+1, centerW-1, 2) - neighborhoodData(centerH+1, centerW-1, 1);
66+
end
67+
end
68+
end
69+
70+

Demosaic/src/DW_Kn.m

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function Kn = DW_Kn(neighborhoodData, directionNum, rawFlag, needChannel)
1+
function Kn = DW_Kn(neighborhoodData, directionNum, channelAdded)
22
% DW_Kn.m get rawData from HiRawImage
33
% Input:
44
% neighborhoodData the data of neighborhood range
@@ -14,11 +14,14 @@
1414
% e-mail: wtzhu_13@163.com
1515
% Last Modified by wtzhu v1.0 2022-01-23
1616
% Note:
17+
if nargin < 3
18+
channelAdded = 1;
19+
end
1720
Kn = zeros(directionNum, 1);
1821
[h, w, c] = size(neighborhoodData);
1922
centerH = round(h/2);
2023
centerW = round(w/2);
21-
if rawFlag
24+
if c == 1
2225
Kn(1) = neighborhoodData(centerH, centerW-1) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH, centerW-2)) / 2;
2326
Kn(2) = neighborhoodData(centerH-1, centerW) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH-2, centerW)) / 2;
2427
Kn(3) = neighborhoodData(centerH, centerW+1) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH, centerW+2)) / 2;
@@ -35,31 +38,24 @@
3538
else
3639
switch directionNum
3740
case 12
38-
Kn(1) = neighborhoodData(centerH, centerW-1) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH, centerW-2)) / 2;
39-
Kn(2) = neighborhoodData(centerH-1, centerW) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH-2, centerW)) / 2;
40-
Kn(3) = neighborhoodData(centerH, centerW+1) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH, centerW+2)) / 2;
41-
Kn(4) = neighborhoodData(centerH+1, centerW) - (neighborhoodData(centerH, centerW) + neighborhoodData(centerH+2, centerW)) / 2;
41+
Kn(1) = neighborhoodData(centerH, centerW-1, 2) - neighborhoodData(centerH, centerW-1, channelAdded);
42+
Kn(2) = neighborhoodData(centerH-1, centerW, 2) - neighborhoodData(centerH-1, centerW, channelAdded );
43+
Kn(3) = neighborhoodData(centerH, centerW+1, 2) - neighborhoodData(centerH, centerW+1, channelAdded);
44+
Kn(4) = neighborhoodData(centerH+1, centerW, 2) - neighborhoodData(centerH+1, centerW, channelAdded);
4245

43-
Kn(5) = neighborhoodData(centerH-1, centerW-2) - (neighborhoodData(centerH-2, centerW-2) + neighborhoodData(centerH, centerW-2)) / 2;
44-
Kn(6) = neighborhoodData(centerH-2, centerW-1) - (neighborhoodData(centerH-2, centerW-2) + neighborhoodData(centerH-2, centerW)) / 2;
45-
Kn(7) = neighborhoodData(centerH-2, centerW+1) - (neighborhoodData(centerH-2, centerW) + neighborhoodData(centerH-2, centerW+2)) / 2;
46-
Kn(8) = neighborhoodData(centerH-1, centerW+2) - (neighborhoodData(centerH-2, centerW+2) + neighborhoodData(centerH, centerW+2)) / 2;
47-
Kn(9) = neighborhoodData(centerH+1, centerW+2) - (neighborhoodData(centerH+2, centerW+2) + neighborhoodData(centerH, centerW+2)) / 2;
48-
Kn(10) = neighborhoodData(centerH+2, centerW+1) - (neighborhoodData(centerH+2, centerW+2) + neighborhoodData(centerH+2, centerW)) / 2;
49-
Kn(11) = neighborhoodData(centerH+2, centerW-1) - (neighborhoodData(centerH+2, centerW-2) + neighborhoodData(centerH+2, centerW)) / 2;
50-
Kn(12) = neighborhoodData(centerH+1, centerW-2) - (neighborhoodData(centerH+2, centerW-2) + neighborhoodData(centerH, centerW-2)) / 2;
46+
Kn(5) = neighborhoodData(centerH-1, centerW-2, 2) - neighborhoodData(centerH-1, centerW-2, channelAdded);
47+
Kn(6) = neighborhoodData(centerH-2, centerW-1, 2) - neighborhoodData(centerH-2, centerW-1, channelAdded);
48+
Kn(7) = neighborhoodData(centerH-2, centerW+1, 2) - neighborhoodData(centerH-2, centerW+1, channelAdded);
49+
Kn(8) = neighborhoodData(centerH-1, centerW+2, 2) - neighborhoodData(centerH-1, centerW+2, channelAdded);
50+
Kn(9) = neighborhoodData(centerH+1, centerW+2, 2) - neighborhoodData(centerH+1, centerW+2, channelAdded);
51+
Kn(10) = neighborhoodData(centerH+2, centerW+1, 2) - neighborhoodData(centerH+2, centerW+1, channelAdded);
52+
Kn(11) = neighborhoodData(centerH+2, centerW-1, 2) - neighborhoodData(centerH+2, centerW-1, channelAdded);
53+
Kn(12) = neighborhoodData(centerH+1, centerW-2, 2) - neighborhoodData(centerH+1, centerW-2, channelAdded);
5154
case 4
52-
if needChannel
53-
Kn(1) = neighborhoodData(centerH-1, centerW-1, 2) - neighborhoodData(centerH-1, centerW-1, 3);
54-
Kn(2) = neighborhoodData(centerH-1, centerW+1, 2) - neighborhoodData(centerH-1, centerW+1, 3);
55-
Kn(3) = neighborhoodData(centerH+1, centerW+1, 2) - neighborhoodData(centerH+1, centerW+1, 3);
56-
Kn(4) = neighborhoodData(centerH+1, centerW-1, 2) - neighborhoodData(centerH+1, centerW-1, 3);
57-
else
58-
Kn(1) = neighborhoodData(centerH-1, centerW-1, 2) - neighborhoodData(centerH-1, centerW-1, 1);
59-
Kn(2) = neighborhoodData(centerH-1, centerW+1, 2) - neighborhoodData(centerH-1, centerW+1, 1);
60-
Kn(3) = neighborhoodData(centerH+1, centerW+1, 2) - neighborhoodData(centerH+1, centerW+1, 1);
61-
Kn(4) = neighborhoodData(centerH+1, centerW-1, 2) - neighborhoodData(centerH+1, centerW-1, 1);
62-
end
55+
Kn(1) = neighborhoodData(centerH-1, centerW-1, 2) - neighborhoodData(centerH-1, centerW-1, channelAdded);
56+
Kn(2) = neighborhoodData(centerH-1, centerW+1, 2) - neighborhoodData(centerH-1, centerW+1, channelAdded);
57+
Kn(3) = neighborhoodData(centerH+1, centerW+1, 2) - neighborhoodData(centerH+1, centerW+1, channelAdded);
58+
Kn(4) = neighborhoodData(centerH+1, centerW-1, 2) - neighborhoodData(centerH+1, centerW-1, channelAdded);
6359
end
6460
end
6561

Demosaic/src/DW_Wn.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
[h, w, c] = size(neighborhoodData);
2121
centerH = round(h/2);
2222
centerW = round(w/2);
23-
23+
sumIn = 0;
2424
switch directionNum
2525
case 12
2626
In(1) = abs(neighborhoodData(centerH, centerW-1, channelAdded) - neighborhoodData(centerH, centerW+1, channelAdded)) + ...
@@ -58,7 +58,7 @@
5858

5959
In(12) = 0.5*(abs(neighborhoodData(centerH+1, centerW-2, channelAdded) - neighborhoodData(centerH-1, centerW+2, channelAdded)) + ...
6060
abs(neighborhoodData(centerH+2, centerW-4, channelDeal) - neighborhoodData(centerH, centerW, channelDeal)));
61-
sumIn = 0;
61+
6262
for i =1 :12
6363
sumIn = sumIn + (1/(1+In(i)));
6464
end
@@ -77,7 +77,7 @@
7777

7878
In(4) = abs(neighborhoodData(centerH+1, centerW-1) - neighborhoodData(centerH-1, centerW+1)) + ...
7979
abs(neighborhoodData(centerH+2, centerW-2) - neighborhoodData(centerH, centerW));
80-
sumIn = 0;
80+
8181
for i =1 :4
8282
sumIn = sumIn + (1/(1+In(i)));
8383
end

Demosaic/src/directionallyWeighted.asv

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@ height= 768;
1515
bits = 8;
1616

1717
%% ------------Global Value--------------
18-
isRaw = 1;
19-
notRaw = 0;
20-
needB = 1;
21-
needR = 0;
2218
RC = 1;
2319
GC = 2;
2420
BC = 3;
2521

2622
%% --------------------------------------
23+
orImg = imread('images/kodim19.png');
24+
figure();imshow(orgImg);title('org image');
25+
2726
bayerData = readRaw(filePath, bits, width, height);
2827
figure();
2928
imshow(bayerData);
@@ -43,14 +42,14 @@ for ver = 5: height + 4
4342
imDst(ver, hor, 1) = bayerPadding(ver, hor);
4443
neighborhoodData = bayerPadding(ver-4: ver+4, hor-4: hor+4);
4544
Wn = DW_Wn(neighborhoodData, 12);
46-
Kn = DW_Kn(neighborhoodData, 12, isRaw);
45+
Kn = DW_Kn(neighborhoodData, 12);
4746
imDst(ver, hor, 2) = bayerPadding(ver, hor) + sum(Wn .* Kn);
4847
% B channal
4948
elseif (0 == mod(ver, 2) && 0 == mod(hor, 2))
5049
imDst(ver, hor, 3) = bayerPadding(ver, hor);
5150
neighborhoodData = bayerPadding(ver-4: ver+4, hor-4: hor+4);
5251
Wn = DW_Wn(neighborhoodData, 12);
53-
Kn = DW_Kn(neighborhoodData, 12, isRaw);
52+
Kn = DW_Kn(neighborhoodData, 12);
5453
imDst(ver, hor, 2) = bayerPadding(ver, hor) + sum(Wn .* Kn);
5554
% Gr
5655
elseif (1 == mod(ver, 2) && 0 == mod(hor, 2))
@@ -76,14 +75,14 @@ for ver = 5: height + 4
7675
neighborRaw = bayerPadding(ver-4: ver+4, hor-4: hor+4);
7776
Wn = DW_Wn(neighborRaw, 4);
7877
neighborhoodData = imDst(ver-4: ver+4, hor-4: hor+4, :);
79-
Kn = DW_Kn(neighborhoodData, 4, notRaw, needB);
78+
Kn = DW_Kn(neighborhoodData, 4, BC);
8079
imDst(ver, hor, 3) = imDst(ver, hor, 2) - sum(Wn .* Kn);
8180
% B channal
8281
elseif (0 == mod(ver, 2) && 0 == mod(hor, 2))
8382
neighborRaw = bayerPadding(ver-4: ver+4, hor-4: hor+4);
8483
Wn = DW_Wn(neighborRaw, 4);
8584
neighborhoodData = imDst(ver-4: ver+4, hor-4: hor+4, :);
86-
Kn = DW_Kn(neighborhoodData, 4, notRaw, needR);
85+
Kn = DW_Kn(neighborhoodData, 4, RC);
8786
imDst(ver, hor, 1) = imDst(ver, hor, 2) - sum(Wn .* Kn);
8887
else
8988
continue
@@ -109,8 +108,11 @@ for ver = 5: height + 4
109108
% G
110109
else
111110
Wrn = DW_Wn(neighborhoodData, 12, GC, RC);
112-
wbn = DW_Wn(neighborhoodData, 12, GC, BC);
113-
imDst(ver, hor, 2) = bayerPadding(ver, hor);
111+
Wbn = DW_Wn(neighborhoodData, 12, GC, BC);
112+
Krn = DW_Kn(neighborhoodData, 12, RC);
113+
Kbn = DW_Kn(neighborhoodData, 12, BC);
114+
imDst(ver, hor, 1) = imDst(ver, hor, 2) - sum(Wrn .* Krn);
115+
imDst(ver, hor, 3) = imDst(ver, hor, 2) - sum(Wbn .* Kbn);
114116
end
115117
end
116118
end
@@ -119,31 +121,29 @@ imDst(:, 1: 4, :) = imDst(:, 5: 8, :);
119121
imDst(:, width+5: width+8, :) = imDst(:, width+1: width+4, :);
120122
imDst(1:4, : , :) = imDst(5: 8, :, :);
121123
imDst(height+5: height+8, : , :) = imDst(height+1: height+4, :, :);
124+
%imshow(uint8(imDst));title('now')
122125

123126
%% Adjust the estimated green values of red/blue samples
124127
for ver = 5: height + 4
125128
for hor = 5: width +4
129+
neighborhoodData = imDst(ver-4: ver+4, hor-4: hor+4, :);
126130
% R channal
127131
if(1 == mod(ver, 2) && 1 == mod(hor, 2))
128-
imDst(ver, hor, 1) = bayerPadding(ver, hor);
129-
neighborhoodData = bayerPadding(ver-4: ver+4, hor-4: hor+4);
130-
Wn = DW_Wn(neighborhoodData, 12);
131-
Kn = DW_Kn(neighborhoodData, 12, isRaw);
132-
imDst(ver, hor, 2) = bayerPadding(ver, hor) + sum(Wn .* Kn);
132+
Wrn = DW_Wn(neighborhoodData, 12, RC, GC);
133+
Krn = DW_Kn(neighborhoodData, 12, RC);
134+
imDst(ver, hor, 2) = imDst(ver, hor, 2) - sum(Wrn .* Krn);
133135
% B channal
134136
elseif (0 == mod(ver, 2) && 0 == mod(hor, 2))
135-
imDst(ver, hor, 3) = bayerPadding(ver, hor);
136-
neighborhoodData = bayerPadding(ver-4: ver+4, hor-4: hor+4);
137-
Wn = DW_Wn(neighborhoodData, 12);
138-
Kn = DW_Kn(neighborhoodData, 12, isRaw);
139-
imDst(ver, hor, 2) = bayerPadding(ver, hor) + sum(Wn .* Kn);
137+
Wbn = DW_Wn(neighborhoodData, 12, BC, GC);
138+
Kbn = DW_Kn(neighborhoodData, 12, BC);
139+
imDst(ver, hor, 2) = imDst(ver, hor, 2) - sum(Wbn .* Kbn);
140140
% G
141141
else
142142
continue
143143
end
144144
end
145145
end
146-
146+
figure();imshow(uint8(imDst));title();
147147

148148

149149

Demosaic/src/directionallyWeighted.m

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@
1515
bits = 8;
1616

1717
%% ------------Global Value--------------
18-
isRaw = 1;
19-
notRaw = 0;
20-
needB = 1;
21-
needR = 0;
2218
RC = 1;
2319
GC = 2;
2420
BC = 3;
2521

2622
%% --------------------------------------
23+
orgImg = imread('images/kodim19.png');
24+
figure();imshow(orgImg);title('org image');
25+
2726
bayerData = readRaw(filePath, bits, width, height);
2827
figure();
2928
imshow(bayerData);
@@ -43,14 +42,14 @@
4342
imDst(ver, hor, 1) = bayerPadding(ver, hor);
4443
neighborhoodData = bayerPadding(ver-4: ver+4, hor-4: hor+4);
4544
Wn = DW_Wn(neighborhoodData, 12);
46-
Kn = DW_Kn(neighborhoodData, 12, isRaw);
45+
Kn = DW_Kn(neighborhoodData, 12);
4746
imDst(ver, hor, 2) = bayerPadding(ver, hor) + sum(Wn .* Kn);
4847
% B channal
4948
elseif (0 == mod(ver, 2) && 0 == mod(hor, 2))
5049
imDst(ver, hor, 3) = bayerPadding(ver, hor);
5150
neighborhoodData = bayerPadding(ver-4: ver+4, hor-4: hor+4);
5251
Wn = DW_Wn(neighborhoodData, 12);
53-
Kn = DW_Kn(neighborhoodData, 12, isRaw);
52+
Kn = DW_Kn(neighborhoodData, 12);
5453
imDst(ver, hor, 2) = bayerPadding(ver, hor) + sum(Wn .* Kn);
5554
% Gr
5655
elseif (1 == mod(ver, 2) && 0 == mod(hor, 2))
@@ -76,14 +75,14 @@
7675
neighborRaw = bayerPadding(ver-4: ver+4, hor-4: hor+4);
7776
Wn = DW_Wn(neighborRaw, 4);
7877
neighborhoodData = imDst(ver-4: ver+4, hor-4: hor+4, :);
79-
Kn = DW_Kn(neighborhoodData, 4, notRaw, needB);
78+
Kn = DW_Kn(neighborhoodData, 4, BC);
8079
imDst(ver, hor, 3) = imDst(ver, hor, 2) - sum(Wn .* Kn);
8180
% B channal
8281
elseif (0 == mod(ver, 2) && 0 == mod(hor, 2))
8382
neighborRaw = bayerPadding(ver-4: ver+4, hor-4: hor+4);
8483
Wn = DW_Wn(neighborRaw, 4);
8584
neighborhoodData = imDst(ver-4: ver+4, hor-4: hor+4, :);
86-
Kn = DW_Kn(neighborhoodData, 4, notRaw, needR);
85+
Kn = DW_Kn(neighborhoodData, 4, RC);
8786
imDst(ver, hor, 1) = imDst(ver, hor, 2) - sum(Wn .* Kn);
8887
else
8988
continue
@@ -109,8 +108,11 @@
109108
% G
110109
else
111110
Wrn = DW_Wn(neighborhoodData, 12, GC, RC);
112-
wbn = DW_Wn(neighborhoodData, 12, GC, BC);
113-
111+
Wbn = DW_Wn(neighborhoodData, 12, GC, BC);
112+
Krn = DW_Kn(neighborhoodData, 12, RC);
113+
Kbn = DW_Kn(neighborhoodData, 12, BC);
114+
imDst(ver, hor, 1) = imDst(ver, hor, 2) - sum(Wrn .* Krn);
115+
imDst(ver, hor, 3) = imDst(ver, hor, 2) - sum(Wbn .* Kbn);
114116
end
115117
end
116118
end
@@ -119,31 +121,29 @@
119121
imDst(:, width+5: width+8, :) = imDst(:, width+1: width+4, :);
120122
imDst(1:4, : , :) = imDst(5: 8, :, :);
121123
imDst(height+5: height+8, : , :) = imDst(height+1: height+4, :, :);
124+
figure();imshow(uint8(imDst));title('now');
122125

123126
%% Adjust the estimated green values of red/blue samples
124127
for ver = 5: height + 4
125128
for hor = 5: width +4
129+
neighborhoodData = imDst(ver-4: ver+4, hor-4: hor+4, :);
126130
% R channal
127131
if(1 == mod(ver, 2) && 1 == mod(hor, 2))
128-
imDst(ver, hor, 1) = bayerPadding(ver, hor);
129-
neighborhoodData = bayerPadding(ver-4: ver+4, hor-4: hor+4);
130-
Wn = DW_Wn(neighborhoodData, 12);
131-
Kn = DW_Kn(neighborhoodData, 12, isRaw);
132-
imDst(ver, hor, 2) = bayerPadding(ver, hor) + sum(Wn .* Kn);
132+
Wrn = DW_Wn(neighborhoodData, 12, RC, GC);
133+
Krn = DW_Kn(neighborhoodData, 12, RC);
134+
imDst(ver, hor, 2) = imDst(ver, hor, 2) - sum(Wrn .* Krn);
133135
% B channal
134136
elseif (0 == mod(ver, 2) && 0 == mod(hor, 2))
135-
imDst(ver, hor, 3) = bayerPadding(ver, hor);
136-
neighborhoodData = bayerPadding(ver-4: ver+4, hor-4: hor+4);
137-
Wn = DW_Wn(neighborhoodData, 12);
138-
Kn = DW_Kn(neighborhoodData, 12, isRaw);
139-
imDst(ver, hor, 2) = bayerPadding(ver, hor) + sum(Wn .* Kn);
137+
Wbn = DW_Wn(neighborhoodData, 12, BC, GC);
138+
Kbn = DW_Kn(neighborhoodData, 12, BC);
139+
imDst(ver, hor, 2) = imDst(ver, hor, 2) - sum(Wbn .* Kbn);
140140
% G
141141
else
142142
continue
143143
end
144144
end
145145
end
146-
146+
figure();imshow(uint8(imDst));title('demosaicking image');
147147

148148

149149

0 commit comments

Comments
 (0)