measureSharpness

Измерьте пространственную частотную характеристику с помощью графика Imatest® eSFR

Синтаксис

sharpnessTable = measureSharpness(chart)
sharpnessTable = measureSharpness(chart,Name,Value)
[sharpnessTable,aggregateSharpnessTable] = measureSharpness(___)

Описание

sharpnessTable = measureSharpness(chart) измеряет пространственную частотную характеристику (SFR) во всех наклонных видимых областях ребра (КОРОЛИ) графика Imatest® eSFR. sharpnessTable включает частоту для каждого ROI, в котором ответ спадает до 50% начальных и пиковых значений.

пример

sharpnessTable = measureSharpness(chart,Name,Value) измеряет швейцарский франк во всех заданных наклонных КОРОЛЯХ ребра, задавая дополнительные параметры.

[sharpnessTable,aggregateSharpnessTable] = measureSharpness(___) также возвращает средний швейцарский франк вертикальных и горизонтальных КОРОЛЕЙ, с помощью входных параметров любого из предыдущих синтаксисов.

Примеры

свернуть все

Считайте изображение графика eSFR в рабочую область.

I = imread('eSFRTestImage.jpg');

Создайте объект esfrChart, затем отобразите график с аннотациями ROI. 60 наклонных КОРОЛЕЙ ребра маркированы зелеными числами.

chart = esfrChart(I);
displayChart(chart,'displayColorROIs',false,...
    'displayGrayROIs',false,'displayRegistrationPoints',false)

Измерьте резкость края в КОРОЛЯХ 25-28 и возвратите измерения в sharpnessTable. Включайте измерения MTF70 и MTF30 путем определения аргумента пары "имя-значение" 'percentResponse'.

sharpnessTable = measureSharpness(chart,'ROIIndex',25:28,'PercentResponse',[70 30])
sharpnessTable=4×9 table
    ROI    slopeAngle    confidenceFlag        SFR         comment                       MTF70                                           MTF70P                                        MTF30                                       MTF30P                 
    ___    __________    ______________    ____________    _______    ____________________________________________    ____________________________________________    ________________________________________    ________________________________________

    25       4.2391          true          [88x5 table]      []       0.060224    0.058884    0.051757    0.058482    0.060224    0.058884    0.051757    0.058482    0.10732    0.11267    0.11185    0.11178    0.10732    0.11267    0.11185    0.11178
    26       5.0254          true          [88x5 table]      []        0.18561     0.18597     0.18667     0.18597     0.18561     0.18597     0.18667     0.18597    0.26028    0.26236    0.26224    0.26241    0.26028    0.26236    0.26224    0.26241
    27       4.7131          true          [88x5 table]      []       0.070042    0.069599    0.066239     0.06951    0.070042    0.069599    0.066239     0.06951     0.2169    0.21863    0.22086    0.21904     0.2169    0.21863    0.22086    0.21904
    28       4.8996          true          [88x5 table]      []        0.19485     0.20418     0.19669     0.20168     0.19485     0.20418     0.19658     0.20168    0.26447    0.27531    0.26004    0.27188    0.26447    0.27531    0.25998    0.27188

Выберите четвертую строку в таблице резкости, которая соответствует ROI 28. Отобразите график швейцарского франка ROI.

idx = 4;
plotSFR(sharpnessTable(idx,:))

Распечатайте MTF70 и измерения MTF30 ROI. Сравните измерения с графиком.

Измерение MTF70 красных и синих цветовых каналов немного меньше, чем 0,2, в то время как измерение MTF70 зеленых каналов и каналов яркости немного больше, чем 0,2. Эти измерения соглашаются с визуальным осмотром графика швейцарского франка, на котором значение швейцарского франка 0,7 происходит на пространственных частотах приблизительно 0,2 пары строки на пиксель.

mtf70 = sharpnessTable.MTF70(idx,:)
mtf70 = 1×4

    0.1949    0.2042    0.1967    0.2017

Измерение MTF30 синего цветового канала заметно меньше, чем измерение MTF30 других цветовых каналов. Это измерение соглашается с визуальным осмотром графика швейцарского франка, на котором кривая швейцарского франка синего канала понижается более быстро, чем другие каналы.

mtf30 = sharpnessTable.MTF30(idx,:)
mtf30 = 1×4

    0.2645    0.2753    0.2600    0.2719

Входные параметры

свернуть все

график eSFR, заданный как объект esfrChart.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: measureSharpness(myChart,'ROIIndex',2) измеряет резкость только ROI 2.

Индексы ROI, чтобы включать в измерения, заданные как пара, разделенная запятой, состоящая из 'ROIIndex' и скаляра или вектора целых чисел в области значений [1, 60]. Индексы совпадают с числами ROI, отображенными displayChart.

Примечание

measureSharpness использует пересечение КОРОЛЕЙ, заданных 'ROIIndex' и ' ROIOrientation '.

Пример: 29:32

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Ориентация ROI, заданная как пара, разделенная запятой, состоящая из 'ROIOrientation' и 'both', 'vertical' или 'horizontal'. Функция measureSharpness выполняет измерения только на КОРОЛЯХ с заданной ориентацией.

Примечание

measureSharpness использует пересечение КОРОЛЕЙ, заданных ' ROIIndex ' и 'ROIOrientation'.

Пример: 'vertical'

Типы данных: char | string

Значение частотной характеристики, в которой можно сообщить о соответствующей пространственной частоте, заданной как пара, разделенная запятой, состоящая из 'PercentResponse' и скаляра или вектора целых чисел в области значений [1, 100].

Каждое значение PercentResponse добавляет два столбца в выходные аргументы aggregateSharpnessTable и sharpnessTable. Столбцы указывают на частоту, на которой швейцарский франк спадает до заданного процента начальных и пиковых значений. Например, когда PercentResponse имеет значение 50, обе выходных таблицы имеют столбцы MTF50 и MTF50P. Эти столбцы указывают на частоту, на которой швейцарский франк спадает до 50% начального значения и пикового значения, соответственно.

Пример: 30

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string

Выходные аргументы

свернуть все

Измерения швейцарского франка ребра, возвращенного как m-by-n таблица. m является количеством выбранных КОРОЛЕЙ. n изменяет значения в зависимости от PercentResponse. Первые пять столбцов всегда присутствуют и представляют эти переменные:

ПеременнаяОписание
ROIИндекс выбранного ROI. Значение ROI является целым числом в области значений [1, 60].
slopeAngleУгол между наклонным ребром и чистой вертикалью или горизонтальный, в зависимости от ориентации ROI. Угол измеряется в градусах, и он возвращен как скаляр типа double.
confidenceFlag

Булев флаг, который указывает, надежно ли измерение резкости. confidenceFlag является true, когда измерение надежно. confidenceFlag является false, когда измерение ненадежно из-за следующих условий:

  • slopeAngle является меньше чем 3,5 градусами или больше чем 15 градусами.

  • Контраст в ROI составляет меньше чем 20%.

Контраст наклонного ROI ребра задан как 100 * (IHigh - ILow)/(IHigh + ILow), где IHigh и ILow являются предполагаемой средней интенсивностью высоких и низких областей интенсивности через ребро. Контраст вычисляется только для красного канала.

SFR

Пространственная частотная характеристика ребра в ROI. SFR является f-by-5 таблица. Эти пять столбцов представляют значение частоты и красный, зеленый, синий, и значения яркости, соответствующие той частоте. f является количеством выборок частоты MTF.

Яркость (Y) является линейной комбинацией красного (R), зеленый (G), и синий (B) каналы согласно:

Y = 0.213R + 0.715G + 0.072B

commentКогда confidenceFlag является false, затем comment описывает причину, измерение ненадежно. Когда confidenceFlag является true, затем comment является пустым вектором, [].

Каждое значение PercentResponse добавляет два столбца, которые указывают на частоту, на которой швейцарский франк спадает до заданного процента начального и пикового значения. Формат каждой записи в столбце является вектором 1 на 4. Эти четыре элемента соответствуют красному, зеленому, синему цвету, и каналы яркости, соответственно.

Средние измерения швейцарского франка вертикальных и горизонтальных ребер, возвращенных как таблица с одной или двумя строками. aggregateSharpnessTable ссорится, когда у всех выбранных КОРОЛЕЙ есть та же ориентация. Это имеет две строки, когда выбранные КОРОЛИ смешали ориентацию. aggregateSharpnessTable имеет три меньше столбцов, чем sharpnessTable.

Первые два столбца aggregateSharpnessTable всегда присутствуют и представляют эти переменные:

ПеременнаяОписание
OrientationОриентация усредненного SFRs. Значением Orientation является или 'horizontal' или 'vertical'.
SFR

Усредненная пространственная частотная характеристика всех ребер во включенных КОРОЛЯХ с ориентацией, заданной Orientation.

SFR является s-by-5 таблица. Эти пять столбцов представляют значение частоты, и усредненный красный, зеленый, синий, и значения яркости, соответствующие той частоте. s является количеством выборок частоты MTF.

Яркость (Y) вычисляется как линейная комбинация красного (R), зеленый (G), и синяя (B) каналы согласно:

Y = 0.213R + 0.715G + 0.072B

Каждое значение PercentResponse добавляет два столбца, которые указывают на частоту, на которой швейцарский франк спадает до заданного процента начального и пикового значения. Формат каждой записи в столбце является вектором 1 на 4. Эти четыре элемента соответствуют красному, зеленому, синему цвету, и каналы яркости, усредненные среди всех выбранных КОРОЛЕЙ с той же ориентацией.

Советы

  • Наклонные ребра на правильно ориентированном графике под углом 5 градусов горизонтали или вертикальные. Измерения резкости не точны, когда ориентация ребра значительно отклоняется от 5 градусов.

  • Резкость выше к центру изображенной области и уменьшений к периферии. Горизонтальная резкость обычно выше, чем вертикальная резкость.

Алгоритмы

Алгоритм измерения швейцарского франка на основе работы [1] [2] Питера Бернса. Во-первых, measureSharpness определяет положение ребра с субпиксельным разрешением для каждой строки развертки, или строку или столбец пиксельного перпендикуляра к ребру, в ROI. Например, каждая строка пикселей является строкой развертки для почти вертикального ребра. Затем, measureSharpness выравнивает и составляет в среднем строки развертки, чтобы создать сверхдискретизированный профиль интенсивности ребра. Функция берет производную профиля интенсивности и применяет функцию работы с окнами. Возвращенное измерение швейцарского франка является абсолютным значением преобразования Фурье оконной производной.

Ссылки

[1] Записи, Питер. "Slanted-Edge MTF для Анализа Цифрового фотоаппарата и Сканера". Общество Обработки изображений Науки и техники; Продолжения Обработки изображений, Качества изображения, Системной Конференции по Захвату изображения. Портленд, Орегон, март 2000. стр 135–138.

[2] Записи, Питер. "sfrmat3: оценка швейцарского франка для цифровых фотоаппаратов и сканеров". URL: http://losburns.com/imaging/software/SFRedge/sfrmat3_post/index.html.

Введенный в R2017b