Проблема в том, что линия у вас там:
transmask[i*nmax+j] = .25*(posmask[(i+1)*nmax + j]+posmask[(i-1)*nmax+j]+posmask[i*nmax+(j+1)]+posmask[i*nmax+(j-1)]);
вовсе не дискретный лапласиан.
Что у вас есть (I (i + 1, j) + I (i-1, j) + I (i, j + 1) + I (i, j-1)) / 4
Я не знаю, что это за маска, но дискретный лапласиан (при условии, что расстояние между каждым пикселем в каждом измерении равно 1):
(- 4 * I (i, j) + I (i + 1, j) + I (i-1, j) + I (i, j + 1) + I (i, j-1))
Так что, по сути, вы пропустили термин, и вам не нужно делить на 4. Я предлагаю вернуться и заново извлечь дискретный лапласиан из его определения, которое является второй x производной изображения плюс вторая производная y от изображение.
Редактировать: Я вижу, откуда вы взяли /4
, поскольку Matlab по какой-то причине использует это определение (хотя математически это не стандартно).