Skip to content

Commit 1190159

Browse files
committed
https
1 parent a04671e commit 1190159

File tree

9 files changed

+12
-12
lines changed

9 files changed

+12
-12
lines changed

_config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ description: >
77
photography, so the posts and projects will have a vision-and-graphics
88
bent.
99
baseurl: ""
10-
url: "http://learningjulia.com"
10+
url: "https://learningjulia.com"
1111
twitter:
1212
username: learningjulia
1313
github:

_includes/header.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
{% endif %}
2424
{% endfor %}
2525
<a class="page-link" href="{{ "/feed.xml" | relative_url }}">RSS</a>
26-
<a class="page-link" href='http://cloud.feedly.com/#subscription%2Ffeed%2Fhttp%3A%2F%2Flearningjulia.com%2Ffeed.xml' target='blank'>Feedly</a>
26+
<a class="page-link" href='https://cloud.feedly.com/#subscription%2Ffeed%2Fhttp%3A%2F%2Flearningjulia.com%2Ffeed.xml' target='blank'>Feedly</a>
2727
</div>
2828
</nav>
2929

_includes/notebooks/04-imfilter.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<li>Create an edge map using the high frequency signal from the image</li>
1111
<li>Have a long aside about array notation in Julia</li>
1212
</ol>
13-
<p>This is a natural follow-up to my <a href="http://learningjulia.com/2017/02/24/blurring-and-manipulation.html">blurring computation from a previous exercise</a>, since the Sobel operator is just a different kind of kernel. But it is also a common kernel needed in image manipulation, so I can compare my implemenation timing to the implementation in the <a href="https://github.com/JuliaImages/ImageFiltering.jl">ImageFiltering.jl</a> package. After timing the built-in functions, I won't even try to time my own implemenation...</p>
13+
<p>This is a natural follow-up to my <a href="https://learningjulia.com/2017/02/24/blurring-and-manipulation.html">blurring computation from a previous exercise</a>, since the Sobel operator is just a different kind of kernel. But it is also a common kernel needed in image manipulation, so I can compare my implemenation timing to the implementation in the <a href="https://github.com/JuliaImages/ImageFiltering.jl">ImageFiltering.jl</a> package. After timing the built-in functions, I won't even try to time my own implemenation...</p>
1414
<h2 id="Setup">Setup<a class="anchor-link" href="#Setup">&#182;</a></h2><p>First things first, let's set up for manipulating images.</p>
1515

1616
</div>
@@ -123,7 +123,7 @@ <h2 id="Setup">Setup<a class="anchor-link" href="#Setup">&#182;</a></h2><p>First
123123
<h2 id="Sobel-kernels">Sobel kernels<a class="anchor-link" href="#Sobel-kernels">&#182;</a></h2><p>The first thing we'll try doing is manually running a Sobel image kernel on the input image. The <a href="https://en.wikipedia.org/wiki/Sobel_operator">Sobel operator</a> is basically an approximation of derivatives in the <code>X</code> and <code>Y</code> directions of the image. The theory is that if there is a high gradient magnitude, there is an edge in that location. The way you compute the Sobel operator is to convolve this kernel:</p>
124124
$$K_x = \begin{bmatrix} 1 & 0 & -1 \\ 2 & 0 & -2 \\ 1 & 0 & -1 \end{bmatrix}$$<p>in the <code>X</code> direction, and</p>
125125
$$K_y = \begin{bmatrix} 1 & 2 & 1 \\ 0 & 0 & 0 \\ -1 & -2 & -1 \end{bmatrix}$$<p>in the <code>Y</code> direction. Note how they are just transposes of each other.</p>
126-
<p>Practically, to compute the kernel, we need to iterate over the output image. As we discussed in <a href="http://learningjulia.com/2017/02/24/blurring-and-manipulation.html">a previous post</a>, when transforming one image into another, you need to iterate over the output image, and for each pixel, find the pixels from the input image needed to compute that particular pixel. In the case of the Sobel kernel, we need to iterate over the output twice - once for the <code>X</code> direction, which needs 9 pixels for the computation, and once for the <code>Y</code> direction computation, which also needs 9 pixels.</p>
126+
<p>Practically, to compute the kernel, we need to iterate over the output image. As we discussed in <a href="https://learningjulia.com/2017/02/24/blurring-and-manipulation.html">a previous post</a>, when transforming one image into another, you need to iterate over the output image, and for each pixel, find the pixels from the input image needed to compute that particular pixel. In the case of the Sobel kernel, we need to iterate over the output twice - once for the <code>X</code> direction, which needs 9 pixels for the computation, and once for the <code>Y</code> direction computation, which also needs 9 pixels.</p>
127127
<h2 id="The-imfilter-function">The <code>imfilter</code> function<a class="anchor-link" href="#The-imfilter-function">&#182;</a></h2><p>To apply image kernels, I am going to use the <code>imfilter</code> function from JuliaImages: <a href="http://juliaimages.github.io/latest/function_reference.html#ImageFiltering.imfilter">http://juliaimages.github.io/latest/function_reference.html#ImageFiltering.imfilter</a>. Rather than manually trying to implement out-of-bounds implementations or worrying about applying a dot product / convolution, let's just use the builtins.</p>
128128
<p>Another awesome feature of the JuliaImages library is the ability to pad the input according to 4 rules:</p>
129129
<ol>

_includes/notebooks/05-image-stitching-part-1.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ <h1 id="Setting-up-and-loading-images">Setting up and loading images<a class="an
125125
<div class="inner_cell">
126126
<div class="text_cell_render border-box-sizing rendered_html">
127127
<h1 id="Extracting-Feature-Points">Extracting Feature Points<a class="anchor-link" href="#Extracting-Feature-Points">&#182;</a></h1><p>The first step to stitching two images together is finding feature points, sometimes called <em>keypoints</em>. The main purpose of feature points are to identify points in an image that are "interesting", for some value of interesting. When we are doing image stitching, we generally think points are interesting if they correspond to "corners" in the image. Basically, points at which boundaries happen between objects. The idea is that if we can identify points at the corners of objects, they are unique enough to match nicely if they appear in another image. Of course, this does not happen in practice, but it works fairly well, as we shall see later on.</p>
128-
<p>One method to finding image corners is the <code>Harris corner</code> method, which uses the Sobel kernel (which I implemented and talked about in <a href="http://learningjulia.com/2017/03/09/imfilter-and-arrays.html">my last post</a>) to find areas in the image that have strong gradients.</p>
128+
<p>One method to finding image corners is the <code>Harris corner</code> method, which uses the Sobel kernel (which I implemented and talked about in <a href="https://learningjulia.com/2017/03/09/imfilter-and-arrays.html">my last post</a>) to find areas in the image that have strong gradients.</p>
129129
<p>Thankfully, the <code>Images.jl</code> package we are familiar with implements <a href="https://github.com/JuliaImages/Images.jl/blob/f2b1ad762a18289f5f76fa1070debb460ed6e082/src/corner.jl"><code>imcorner</code></a>:</p>
130130

131131
</div>

_includes/notebooks/06-image-stitching-part-2.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
</div>
55
<div class="inner_cell">
66
<div class="text_cell_render border-box-sizing rendered_html">
7-
<p>In this notebook, I will work on part 2 of the image stitching series. Between this post and the <a href="http://learningjulia.com/2017/03/26/image-stitching-part-1.html">previous post</a>, I go through all 7 steps of an image stitching pipeline:</p>
7+
<p>In this notebook, I will work on part 2 of the image stitching series. Between this post and the <a href="https://learningjulia.com/2017/03/26/image-stitching-part-1.html">previous post</a>, I go through all 7 steps of an image stitching pipeline:</p>
88
<ol>
99
<li>Extracting feature points (<em>Part 1</em>)</li>
1010
<li>Calculate descriptors (<em>Part 1</em>)</li>

_includes/share_icons.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ <h2>Share the fun!</h2>
1313
</a>
1414
</li>
1515
<li class="facebook">
16-
<a href="http://www.facebook.com/sharer.php?u={{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url | uri_escape}}&t={{ page.title | default:"" | uri_escape}}" target="_blank">
16+
<a href="https://www.facebook.com/sharer.php?u={{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url | uri_escape}}&t={{ page.title | default:"" | uri_escape}}" target="_blank">
1717
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path fill="#3b5998" d="M1376 128q119 0 203.5 84.5t84.5 203.5v960q0 119-84.5 203.5t-203.5 84.5h-188v-595h199l30-232h-229v-148q0-56 23.5-84t91.5-28l122-1v-207q-63-9-178-9-136 0-217.5 80t-81.5 226v171h-200v232h200v595h-532q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960z"/></svg>
1818
</a>
1919
</li>
2020
<li class="hn">
21-
<a href="http://news.ycombinator.com/submitlink?u={{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url | uri_escape}}&t={{ page.title | default:"" | uri_escape}}" target="_blank">
21+
<a href="https://news.ycombinator.com/submitlink?u={{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url | uri_escape}}&t={{ page.title | default:"" | uri_escape}}" target="_blank">
2222
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path fill="#ff6600" d="M937 1004l266-499h-112l-157 312q-24 48-44 92l-42-92-155-312h-120l263 493v324h101v-318zm727-588v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z"/></svg>
2323
</a>
2424
</li>

notebooks/04-imfilter.ipynb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"2. Create an edge map using the high frequency signal from the image\n",
1111
"3. Have a long aside about array notation in Julia\n",
1212
"\n",
13-
"This is a natural follow-up to my [blurring computation from a previous exercise](http://learningjulia.com/2017/02/24/blurring-and-manipulation.html), since the Sobel operator is just a different kind of kernel. But it is also a common kernel needed in image manipulation, so I can compare my implemenation timing to the implementation in the [ImageFiltering.jl](https://github.com/JuliaImages/ImageFiltering.jl) package. After timing the built-in functions, I won't even try to time my own implemenation...\n",
13+
"This is a natural follow-up to my [blurring computation from a previous exercise](https://learningjulia.com/2017/02/24/blurring-and-manipulation.html), since the Sobel operator is just a different kind of kernel. But it is also a common kernel needed in image manipulation, so I can compare my implemenation timing to the implementation in the [ImageFiltering.jl](https://github.com/JuliaImages/ImageFiltering.jl) package. After timing the built-in functions, I won't even try to time my own implemenation...\n",
1414
"\n",
1515
"## Setup\n",
1616
"\n",
@@ -156,7 +156,7 @@
156156
"\n",
157157
"in the `Y` direction. Note how they are just transposes of each other.\n",
158158
"\n",
159-
"Practically, to compute the kernel, we need to iterate over the output image. As we discussed in [a previous post](http://learningjulia.com/2017/02/24/blurring-and-manipulation.html), when transforming one image into another, you need to iterate over the output image, and for each pixel, find the pixels from the input image needed to compute that particular pixel. In the case of the Sobel kernel, we need to iterate over the output twice - once for the `X` direction, which needs 9 pixels for the computation, and once for the `Y` direction computation, which also needs 9 pixels.\n",
159+
"Practically, to compute the kernel, we need to iterate over the output image. As we discussed in [a previous post](https://learningjulia.com/2017/02/24/blurring-and-manipulation.html), when transforming one image into another, you need to iterate over the output image, and for each pixel, find the pixels from the input image needed to compute that particular pixel. In the case of the Sobel kernel, we need to iterate over the output twice - once for the `X` direction, which needs 9 pixels for the computation, and once for the `Y` direction computation, which also needs 9 pixels.\n",
160160
"\n",
161161
"## The `imfilter` function\n",
162162
"\n",

notebooks/05-image-stitching-part-1.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@
143143
"\n",
144144
"The first step to stitching two images together is finding feature points, sometimes called _keypoints_. The main purpose of feature points are to identify points in an image that are \"interesting\", for some value of interesting. When we are doing image stitching, we generally think points are interesting if they correspond to \"corners\" in the image. Basically, points at which boundaries happen between objects. The idea is that if we can identify points at the corners of objects, they are unique enough to match nicely if they appear in another image. Of course, this does not happen in practice, but it works fairly well, as we shall see later on.\n",
145145
"\n",
146-
"One method to finding image corners is the `Harris corner` method, which uses the Sobel kernel (which I implemented and talked about in [my last post](http://learningjulia.com/2017/03/09/imfilter-and-arrays.html)) to find areas in the image that have strong gradients.\n",
146+
"One method to finding image corners is the `Harris corner` method, which uses the Sobel kernel (which I implemented and talked about in [my last post](https://learningjulia.com/2017/03/09/imfilter-and-arrays.html)) to find areas in the image that have strong gradients.\n",
147147
"\n",
148148
"Thankfully, the `Images.jl` package we are familiar with implements [`imcorner`](https://github.com/JuliaImages/Images.jl/blob/f2b1ad762a18289f5f76fa1070debb460ed6e082/src/corner.jl):"
149149
]

notebooks/06-image-stitching-part-2.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"editable": true
88
},
99
"source": [
10-
"In this notebook, I will work on part 2 of the image stitching series. Between this post and the [previous post](http://learningjulia.com/2017/03/26/image-stitching-part-1.html), I go through all 7 steps of an image stitching pipeline:\n",
10+
"In this notebook, I will work on part 2 of the image stitching series. Between this post and the [previous post](https://learningjulia.com/2017/03/26/image-stitching-part-1.html), I go through all 7 steps of an image stitching pipeline:\n",
1111
"\n",
1212
"1. Extracting feature points (_Part 1_)\n",
1313
"2. Calculate descriptors (_Part 1_)\n",

0 commit comments

Comments
 (0)