Получение данных RTF из буфера обмена Mac OS X (буфер обмена)

Согласно странице man для pbpaste ,

   -Prefer {txt | rtf | ps}
          tells pbpaste what type of data to look for  in  the  pasteboard
          first.   As stated above, pbpaste normally looks first for plain
          text data; however,  by  specifying  -Prefer  ps  you  can  tell
          pbpaste to look first for Encapsulated PostScript.  If you spec-
          ify -Prefer rtf, pbpaste looks first for Rich Text  format.   In
          any  case,  pbpaste looks for the other formats if the preferred
          one is not found.  The txt option replaces the deprecated  ascii
          option,  which continues to function as before.  Both indicate a
          preference for plain text.

Однако (по моему опыту с 10.6 Snow Leopard как минимум), pbpaste -Prefer rtf никогда, никогда не отдает данные RTF, даже если они существуют на монтажном столе. Есть ли другой простой способ получить RTF-текст того, что готово для вставки?

Я пробовал AppleScript, но osascript -e «буфер обмена как« класс RTF »» дает ответ «data RTF 7B тонна закодированного в Hex дерьма 7D» . сигма (σ). Я хочу попробовать фильтрацию LoG, используя ...

Это формула для фильтрации LoG: alt text
(источник: ed.ac.uk )

Также в приложениях с фильтрацией LoG я вижу, что функция вызывается только с одним параметром: сигма (σ). Я хочу попробовать фильтрацию LoG по этой формуле (предыдущая попытка была по гауссову фильтру, а затем по лапласианскому фильтру с некоторым размером окна фильтра) Но, глядя на эту формулу, я не могу понять, как размер фильтра связан с этой формулой, означает ли это, что размер фильтра является фиксированным? Можете ли вы объяснить, как его использовать?

12
задан hippietrail 11 September 2019 в 06:14
поделиться

3 ответа

Как вы, наверное, уже догадались из других ответов и ссылок, фильтр LoG обнаруживает края и линии на изображении. Чего до сих пор не хватает, так это объяснения того, что такое σ.

σ - масштаб фильтра.Линия шириной в один пиксель - это линия или шум? Является ли линия шириной 6 пикселей линией или объектом с двумя четкими параллельными краями? Градиент, который меняется с черного на белый через 6 или 8 пикселей, является краем или просто градиентом? Это то, что вам нужно решить, и значение σ отражает ваше решение - чем больше σ, тем шире линии, тем более гладкие края и больше шума игнорируется.

Не запутайтесь между масштабом фильтра (σ) и размером дискретного приближения (обычно называемого трафаретом). В ссылке Пола σ = 1,4, а размер шаблона равен 9. Хотя обычно разумно использовать размер шаблона от 4σ до 6σ, эти две величины совершенно независимы. Трафарет большего размера обеспечивает лучшее приближение фильтра, но в большинстве случаев вам не нужно очень хорошее приближение.

7
ответ дан 2 December 2019 в 20:40
поделиться

Это меня тоже смутило, и только когда мне пришлось сделать то же самое для uni-проекта, я понял, что вы должны были делать с формулой!

Вы можете использовать эту формулу для создания дискретного фильтра LoG. Если вы напишете немного кода для реализации этой формулы, вы сможете затем сгенерировать фильтр для использования в свертке изображений. Чтобы сгенерировать, скажем, шаблон 5x5, просто вызовите код с координатами x и y от -2 до +2.

Это сгенерирует значения для использования в шаблоне LoG. Если вы построите график полученных значений, вы должны увидеть форму «мексиканской шляпы», типичную для этого фильтра, например:

LoG template
(источник: ed.ac.uk )

Вы можете точно настроить шаблона, изменив его ширину (размер) и значение сигмы (насколько широк пик). Чем шире и шире шаблон, тем меньше шума будет в результате, потому что он будет работать на более широкой площади.

Когда у вас есть фильтр, вы можете применить его к изображению, свернув шаблон с изображением. Если вы не делали этого раньше, ознакомьтесь с этими несколькими руководствами. учебные пособия по java-апплетам подробнее mathsy .

По сути, в каждом месте пикселя вы «размещаете» шаблон свертки с центром в этом пикселе. Затем вы умножаете значения окружающих пикселей на соответствующий «пиксель» в шаблоне и складываете результат. Это новое значение пикселя в этом месте (обычно вам также необходимо нормализовать (масштабировать) вывод, чтобы вернуть его в правильный диапазон значений).

Приведенный ниже код дает приблизительное представление о том, как это можно реализовать.Приносим извинения за ошибки / опечатки и т. Д., Так как он не был протестирован.

Надеюсь, это поможет.

private float LoG(float x, float y, float sigma)
{
    // implement formula here
    return (1 / (Math.PI * sigma*sigma*sigma*sigma)) * //etc etc - also, can't remember the code for "to the power of" off hand
}

private void GenerateTemplate(int templateSize, float sigma)
{
    // Make sure it's an odd number for convenience
    if(templateSize % 2 == 1)
    {
        // Create the data array
        float[][] template = new float[templateSize][templatesize];

        // Work out the "min and max" values. Log is centered around 0, 0
        // so, for a size 5 template (say) we want to get the values from
        // -2 to +2, ie: -2, -1, 0, +1, +2 and feed those into the formula.
        int min = Math.Ceil(-templateSize / 2) - 1;
        int max = Math.Floor(templateSize / 2) + 1;

        // We also need a count to index into the data array...
        int xCount = 0;
        int yCount = 0;

        for(int x = min; x <= max; ++x)
        {
            for(int y = min; y <= max; ++y)
            {
                // Get the LoG value for this (x,y) pair
                template[xCount][yCount] = LoG(x, y, sigma);
                ++yCount;
            }
            ++xCount;
        }
    }
}
5
ответ дан 2 December 2019 в 20:40
поделиться

Похоже, это непрерывный круговой фильтр с радиусом sqrt (2) * sigma. Если вы хотите реализовать это для обработки изображений, вам необходимо приблизить это.

Вот пример для sigma = 1.4: http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm

1
ответ дан 2 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: