exponenta event banner

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

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

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

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

  • NIQE - Средство оценки качества изображения естественности

  • 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.

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

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

Создайте объект VideyReader, считывающий кадры из видео 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.

См. также

| | | | |

Связанные темы