Сравнение метрик качества без ссылочных изображений

Этот пример показывает, как сравнить эффективность различных слепых или без ссылок метрик качества изображений.

Оценка качества изображения является важной частью рабочих процессов получения, сжатия и улучшения других изображений. Желательно иметь быструю автоматизированную метрику, которая тесно имитирует субъективные показатели качества изображения. В этом примере сравнивается эффективность трех метрик качества без ссылок.

  • BRISQUE - Слепой/Бесфазный оценщик пространственного качества изображений

  • NIQE - Оценка качества изображений Naturalness

  • PIQE - оценщик качества изображений на основе восприятия

Каждая метрика имеет различные сильные стороны в зависимости от изображений в наборе данных. Чтобы выбрать лучшую метрику для ваших данных, можно сравнить эффективность трех метрик на выборочных изображениях. В этом примере показано, как сравнить эффективность в двух различных ситуациях: изменение уровней сжатия JPEG на одном изображении и для видеопотока.

Оцените ответ на изменение сжатия на одном изображении

Сжатие изображения является компромиссом между визуальным качеством и степенью сжатия или размером выходных данных. Компромисс также зависит от содержимого изображения. Например, изображения с однородными областями могут сжиматься до меньших размеров файлов и показывать меньше программных продуктов, чем изображения с подробными функциями. Метрики качества изображений могут помочь проанализировать этот компромисс, одновременно пытаясь минимизировать влияние содержимого изображений на анализ.

Чтение изображения в рабочую область.

im = imread('llama.jpg');

Запись копий изображения с различными коэффициентами сжатия JPG. Считывайте каждое сжатое изображение обратно в рабочую область.

jpegQuality = 10:10:100;
numObservations = numel(jpegQuality);
compressedFrames = cell(1,numObservations);
for ind = 1:numObservations
    q = jpegQuality(ind);
    tempFile = ['llama_compression_',num2str(q),'.jpg'];
    imwrite(im,tempFile,'Quality',q);
    compressedFrames{ind} = imread(tempFile);
end

Осмотрите сжатые изображения.

tiledlayout(1,3);

h1 = nexttile;
imshow(compressedFrames{1})
title('JPEG Quality: 10')

nexttile
imshow(compressedFrames{7})
title('JPEG Quality: 70')

nexttile
imshow(im)
title('Input Image')
linkaxes

Figure contains 3 axes. Axes 1 with title JPEG Quality: 10 contains an object of type image. Axes 2 with title JPEG Quality: 70 contains an object of type image. Axes 3 with title Input Image contains an object of type image.

Увеличьте изображение, чтобы увидеть характер некоторых конкретных программных продуктов. При качестве JPEG 10 программные продукты очевидны.

h1.XLim = [650 700];
h1.YLim = [490 550];

Figure contains 3 axes. Axes 1 with title JPEG Quality: 10 contains an object of type image. Axes 2 with title JPEG Quality: 70 contains an object of type image. Axes 3 with title Input Image contains an object of type image.

Для каждого сжатого изображения JPG вычислите счет качества с помощью трех метрик качества.

pQ = zeros(1, numObservations);
nQ = zeros(1, numObservations);
bQ = zeros(1, numObservations);

for ind=1:numObservations
    bQ(ind) = brisque(compressedFrames{ind});
    nQ(ind) = niqe(compressedFrames{ind});
    pQ(ind) = piqe(compressedFrames{ind});
end

Визуализация счета метрики при повышении качества JPEG. Нормализуйте счета так, чтобы каждый счет имел одинаковое значение для несжатого изображения. Для этих трех метрик более низкие счета соответствуют более высокому качеству изображения.

Счет BRISQUE для качества JPEG 50, 60 и 70 нереально ниже, чем для несжатых изображений JPEG. Поэтому для изображений, подобных этому тестовому изображению, NIQE и PIQE являются более надежными метриками.

figure
hold on
plot(jpegQuality,bQ/bQ(end),'*-');
plot(jpegQuality,nQ/nQ(end),'*-');
plot(jpegQuality,pQ/pQ(end),'*-');
legend('BRISQUE','NIQE','PIQE');
ylabel('Metric Score')
xlabel('JPEG Quality')
hold off

Figure contains an axes. The axes contains 3 objects of type line. These objects represent BRISQUE, NIQE, PIQE.

Оцените ответ на изменение сжатия и содержимого с помощью видео

В приложениях, таких как потоковое видео, существует необходимость оценивать метрики качества в приемнике, который может не иметь доступа к исходной первозданной выборке. Кроме того, содержимое каждой системы координат может значительно варьироваться. Давайте моделируем такой сценарий, чтобы оценить характеристики эффективности этих метрик.

Создайте объект VideoReader, который считывает системы координат из видео 'rhinos.avi'. Это видео имеет 114 системы координат.

vidObjR = VideoReader('rhinos.avi');
vidObjW = VideoWriter('varyingCompressed.avi');
open(vidObjW)

Создайте график изменяющегося коэффициента сжатия, чтобы имитировать изменяющиеся скорости передачи в реальном времени

numFrames = vidObjR.NumFrames;
varyingQuality = sin(2*pi*(1:numFrames)*0.01);
varyingQuality = round(rescale(varyingQuality)*100);
varyingQuality = max(varyingQuality,1); % min JPEG quality is 1

figure
plot(varyingQuality);
title('JPEG Quality Schedule');
ylabel('JPEG Quality')
xlabel('Frame Index')

Figure contains an axes. The axes with title JPEG Quality Schedule contains an object of type line.

Для каждой системы координат в видео сжимайте систему координат в соответствии с расписанием качества JPEG. Вычислите метрики сжатой системы координат и добавьте сжатую систему координат к выходу видео для валидации.

pQ = zeros(1,numFrames);
nQ = zeros(1,numFrames);
bQ = zeros(1,numFrames);

ind = 1;
while hasFrame(vidObjR)
    im = readFrame(vidObjR);
    
    % Compress it based on the schedule
    tempFile = 'rhinos_compressed_frame.jpg';
    imwrite(im,tempFile,'Quality',varyingQuality(ind));    
    frame = imread(tempFile);        
    
    writeVideo(vidObjW,frame);
    
    bQ(ind) = brisque(frame);
    nQ(ind) = niqe(frame);
    pQ(ind) = piqe(frame);
    ind = ind+1;
end
close(vidObjW);

Визуализируйте тренд, ожидайте, что он имитирует график сжатия. Пересмотрите метрики, чтобы сосредоточиться на тренде и инвертировать график качества, чтобы получить тренд коэффициента сжатия. Метрики качества все еще могут дать полезное указание на воспринимаемое качество без доступа к исходной системе координат.

figure
hold on
plot(rescale(bQ));
plot(rescale(nQ));
plot(rescale(pQ));
% Invert JPEG Quality to get the compression ratio
plot(1-rescale(varyingQuality),'k','LineWidth',2)
legend('BRISQUE','NIQE','PIQE','Compression Ratio');
title('Trend of Quality Metrics with Varying Compression and Content');
ylabel('Metric Score')
xlabel('Frame Index')
hold off

Figure contains an axes. The axes with title Trend of Quality Metrics with Varying Compression and Content contains 4 objects of type line. These objects represent BRISQUE, NIQE, PIQE, Compression Ratio.

См. также

| | | | |

Похожие темы