Я внедряю небольшую библиотеку изображений для встраиваемой системы как школьный проект, и я хочу предоставить ту же функциональность, которую предоставляет Matlab.Я уже реализовал некоторые базовые вещи, такие как чтение изображений, пороговое значение, некоторые интересные эффекты и т. Д.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти ресурсы о том, как применять фильтры (на основе ядра) к изображениям rbga.Я имею в виду, что я нашел то, что использует временную сумму для каждого цветового канала и для каждого обработанного пикселя.Я пытался сделать то же самое, но мне не удалось.Результат не совпадает с Matlab.Для меня действительно важно иметь точно такой же результат с matlab, потому что это будет означать, что все, что предназначено для запуска в matlab, будет работать и с моим кодом.
Мне было интересно, есть ли книга об этих вещах,Объясняет ли matlab, как реализованы функции?
EDIT
например, я применяю ядро prewittX
>> a = imread('Hydrangeas.jpg');
>> w = [-1 0 1; -1 0 1; -1 0 1];
>> b = imfilter(a,w);
>> imshow(b)
, что я делаю, что-то вроде этого
for i < img.height, i++
for j < img.width, j++
rsum = pixel[i-1,j-1].R*(-1) + pixel[i-1,j+1].R*(1)
rsum += pixel[i,j-1].R*(-1) + pixel[i,j+1].R*(1)
rsum += pixel[i+1,j-1].R*(-1) + pixel[i+1,j+1].R*(1)
gsum = pixel[i-1,j-1].G*(-1) + pixel[i-1,j+1].G*(1)
gsum += pixel[i,j-1].G*(-1) + pixel[i,j+1].G*(1)
gsum += pixel[i+1,j-1].G*(-1) + pixel[i+1,j+1].G*(1)
bsum = pixel[i-1,j-1].B*(-1) + pixel[i-1,j+1].B*(1)
bsum += pixel[i,j-1].B*(-1) + pixel[i,j+1].B*(1)
bsum += pixel[i+1,j-1].B*(-1) + pixel[i+1,j+1].B*(1)
if rsum>255, rsum=255
if gsum>255, gsum=255
if bsum>255, bsum=255
if rsun<0, rsun=0
if gsun<0, gsun=0
if bsun<0, bsun=0
img.setpixel(i,j) = (rsum|gsum|bsum)
end
end
Я также не знаю, что делать с каналом, потому что я обрабатываю изображения RGBA.
Это вывод, который я получаю
выход Matlab