Skip to content

Commit d8f3496

Browse files
committed
fix tile bug in mnnsr
1 parent 576e97f commit d8f3496

File tree

1 file changed

+11
-6
lines changed
  • RealSR-NCNN-Android-CLI/MNN-SR/src/main/jni

1 file changed

+11
-6
lines changed

RealSR-NCNN-Android-CLI/MNN-SR/src/main/jni/mnnsr.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -223,26 +223,29 @@ int MNNSR::process(const cv::Mat &inimage, cv::Mat &outimage, const cv::Mat &mas
223223

224224
int xPrepadding = prepadding, yPrepadding = prepadding;
225225

226+
// 待重新分配的像素数
226227
int left = inWidth % tileWidth;
227-
if (left > 0) {
228+
if (xtiles > 1 && left > 0) {
229+
// fprintf(stderr, "process, xtiles=( (%d + %d - 1) / %d)=%d, left=%d, prepadding=%d\n",
230+
// inWidth, tileWidth, tileWidth, xtiles, left, prepadding);
228231
if (left < prepadding) {
229232
// 倒数第2个tile的prepadding已经包含了推理结果
230233
xtiles--;
231234
} else {
232-
if (left / 2 <= prepadding)
235+
if ((left + 1) / 2 <= prepadding)
233236
xtiles--;
234237
// xtiles * (tilesize - 2 * xPrepadding) + xPrepadding = inWidth
235238
xPrepadding = (xtiles * tilesize - inWidth) / (2 * xtiles - 1);
236239
tileWidth = tilesize - xPrepadding * 2;
237240
}
238241
}
239242
left = inHeight % tileHeight;
240-
if (left > 0) {
243+
if (ytiles > 1 && left > 0) {
241244
if (left < prepadding) {
242245
// 倒数第2个tile的prepadding已经包含了推理结果
243246
ytiles--;
244247
} else {
245-
if (left / 2 <= prepadding)
248+
if ((left + 1) / 2 <= prepadding)
246249
ytiles--;
247250
// ytiles * (tilesize - 2 * yPrepadding) + yPrepadding = inHeight
248251
yPrepadding = (ytiles * tilesize - inHeight) / (2 * ytiles - 1);
@@ -336,8 +339,8 @@ int MNNSR::process(const cv::Mat &inimage, cv::Mat &outimage, const cv::Mat &mas
336339
int l = (xi == 0) ? xPrepadding : 0;
337340
int r = tilesize + in_tile_x0 - in_tile_x1 - l;
338341

339-
// fprintf(stderr, "process y=%d, x=%d copyMakeBorder %d %d %d %d\n", yi, xi, t, b, l,
340-
// r);
342+
// fprintf(stderr, "process y=%d, x=%d copyMakeBorder %d %d %d %d, %d %d\n", yi, xi, t,
343+
// b, l, r, inputTile.cols, inputTile.rows);
341344
// cv::Mat paddedTile;
342345
cv::copyMakeBorder(inputTile, paddedTile, t, b, l, r, cv::BORDER_CONSTANT);
343346

@@ -346,6 +349,8 @@ int MNNSR::process(const cv::Mat &inimage, cv::Mat &outimage, const cv::Mat &mas
346349
input_tensor);
347350

348351
} else {
352+
// fprintf(stderr, "process y=%d, x=%d copyMakeBorder 0, %d %d\n", yi, xi,
353+
// inputTile.cols, inputTile.rows);
349354
// cv::Mat paddedTile;
350355
cv::copyMakeBorder(inputTile, paddedTile, 0, 0, 0, 0, cv::BORDER_CONSTANT);
351356

0 commit comments

Comments
 (0)