2015-05-10 1 views
2

Я работаю над изображениями цвета и серого, я узнаю среднюю квадратную ошибку для шкалы серого, но не знаю, как найти среднюю квадратную ошибку для цветных изображений.Как найти MSE для цветных изображений?

Я сделал это для Грея изображения:

acc = sum((data_gray(:)- reconstructData(:)).^2); 
mse = acc/numel(data_gray); 

Для цветного изображения код последующих не работать, и дать мне ошибку, как: Ошибка использования - Целые можно комбинировать только с целыми числами одного и того же класса , или скалярные удваивает. Ошибка в finalCompress (строка 60) accRC = sum ((RC (:) - recRC (:)).^2);

Код для MSE цветного изображения:

accRC = sum((RC(:) - recRC(:)).^2); 
accGC = sum((GC(:)- recGC(:)).^2); 
accBC = sum((BC(:)- recBC(:)).^2); 
mse = accRC+accGC+accBC/numel(combineColorChannels); 

combineColorChannels образ Color состоит из (recRC,recGC,recBC)

+0

Как я понимаю, MSE является мерой качества изображения. Поэтому вам нужно сравнить 2 изображения, чтобы иметь значение MSE. Если вы сделали для шкалы серого, не должно быть никаких проблем с применением цветных изображений. Также вы должны предоставить код того, что вы уже сделали, чтобы улучшить свои шансы получить хороший ответ. – brodoll

+0

@brodroll я обновил сообщение :) теперь вы можете проверить пожалуйста. – Atif

ответ

1

ошибка довольно ясно. Вы пытаетесь реализовать арифметические операции между двумя изображениями разных типов. MATLAB жалуется на разные типы.

Потому что я не знаю, какой из наборов каналов являются различающиеся типа, это лучшее, что мы бросим все они double перед запуском кода:

%// Change 
RC = double(RC); 
GC = double(GC); 
BC = double(BC); 
recRC = double(recRC); 
recGC = double(recGC); 
recBC = double(recBC); 

%// Your code 
accRC = sum((RC(:) - recRC(:)).^2); 
accGC = sum((GC(:)- recGC(:)).^2); 
accBC = sum((BC(:)- recBC(:)).^2); 
mse = accRC+accGC+accBC/numel(combineColorChannels); 

Если вы приводите все соответствующие каналов до double, приведенный выше код должен работать.

Смежные вопросы