Friday, August 30, 2019

Panoramic Photos with GoPro



I enjoy shooting landscape photos, particularly in our U.S. national parks. Sometimes when trying to photograph a wide panoramic view, I simply can’t squeeze the entire landscape into a single photo. That’s when I use a technique where I take multiple side-by-side overlapping images and stitch them together using a software application. A useful tutorial is provided by Digital Photography School.

For most casual photographers, the built-in panoramic setting in mobile phones will suffice, but since I’m a photo geek, I prefer to shoot in RAW, apply color corrections to the individual photos, stitch, rotate, crop, and make other finishing touches. I know it requires a lot more steps, but I like the results and frankly am fascinated by the computations that are involved in the stitching process.

On a recent trip to Maui, I wanted to travel lightly and decided to leave my DSLR at home and shoot only with my iPhone and GoPro. Blasphemy, I know! While hiking in the Summit District of Haleakalā National Park, my iPhone battery died so I began shooting photos and videos with my GoPro HERO7 Black. As expected, I found myself in a scenario where I decided it would be best to take multiple images and later stitch them into a panorama.

Not having previously done this with a GoPro, and recognizing that GoPro cameras have super wide angles and significant barrel distortion, I made sure to overlap each individual photo even more than I usually do with my DSLR. The individual photos are here if you want to play with them:

      
      

Panoramic stitching applications use different methods to combine images, so it is not surprising that I got different results from three photo stitching applications. It is possible that their computational methods are detailed elsewhere, but my main focus is on the end result. Here is a summary of my findings.

Adobe Lightroom Classic CC 2017

Fail. The Panorama Merge feature in Adobe Lightroom was unable to stitch together the GoPro photos.


I got the same result with the other 2 projection options. Granted, this is an older version of Lightroom, and it is possible that the latest version would produce different results. In any case, when it successfully stitches photos, I prefer to use Lightroom for panoramas because it is the focal point of my RAW processing workflow.

PhotoStitcher 1.6

Fail. The application said that there were not enough key points.


I got the same results while trying multiple projection options. Once again, this is an older version, and I have not upgraded to version 2 because I frankly don’t use this application very much.

PTGui Pro 10.0

Winner! This is the application that I used to create the panoramic photo that is pictured at the top of this blog. Here is a screenshot of the unedited preview:


Obviously I haven’t been upgrading my software because version 11 is available at the time of this writing, and I assume that the current version would also successfully stitch the GoPro images.

Conclusion: From this comparison and also from prior experiences, I feel that PTGui is the most powerful stitching tool that I’ve tried. If your only available option is a wide angle lens, and if other applications are unable to create panoramas, try PTGui. However, the old adage that “an ounce of prevention is worth a pound of cure” definitely applies here—try to shoot panoramas with a lens that has less barrel distortion to begin with. I hope you’ve found this to be helpful.

Sunday, August 25, 2019

Mapping the U.S. National Parks

About a decade ago, I thought it would be a fun goal to try to visit all of the national parks in the United States. They are managed by the National Park Service, and currently there are 61 of them. If you also count national monuments, national historic sites, national seashores, and other national park system designations, there are currently a total of 419 units.

Over the years, I've maintained a spreadsheet of the national parks that I've visited. Not only have I periodically documented which one's I've visited, I've also had to make a few recent additions such as Pinnacles NP (established in 2013), Gateway Arch NP (2018), and Indiana Dunes NP (2019). However, a friend suggested that I create a map to visualize my progress, so I created one using Google My Maps:



I plan to update this map over time, but as of today I've visited 31 of 61 U.S. national parks. Not surprisingly, I've been more likely to visit national parks that are closer to home (Los Angeles). In fact, I've visited all of the national parks in California (9), Utah (5), Arizona (3), New Mexico (1), and Oregon (1) which are within striking distance of a 1-week road trip. Since Hawaii is one of our popular vacation destinations, it also made sense to visit its 2 national parks. Because travel logistics to Florida permitted, I've also checked off its 3 national parks.

Visiting the remainder of the U.S. national parks will require some careful planning (and time and money). I'm not only referring to the ones in the continental U.S. Namely, there are some national parks in Alaska that do not have navigable roads (Katmai NP, Lake Clark NP, Kobuk Valley NP, and Gates of the Arctic NP) so will require either chartered flights and/or backpacking trips. Also potentially challenging are American Samoa NP and Virgin Islands NP because of their distance from home, but commercial flights and lodging are available.

It is fitting that I wrote this blog on the 103rd anniversary of the National Park Service which was formed when the Organic Act was signed into law on August 25, 1916.

Thursday, July 4, 2019

Windows 10 Update Fail and Reinstalling Office 365

For work, I run Windows 10 in a Parallels Desktop virtual machine. Today my Windows Update informed me that a cumulative update for Windows 10 from version 1809 (a.k.a. October 2018) to version 1903 (a.k.a. May 2019). Given that I've been experiencing performance issues, I was hoping that this update would fix those problems and gladly chose to install it. Everything appeared to go smoothly, and I was prompted to restart my machine. However, after a successful restart, I was notified that the update failed to install.



I'm not sure if it's related, but I found a Forbes article about how Microsoft has blocked Windows 10 updates for some Mac users, as well as a Windows Support article addressing the same issue. Neither of them specifically apply to Windows 10 updates on Parallels Desktop, but I wonder if the same underlying issue applies. In any case, I decided to wait for Microsoft to address its underlying issues and wait for the next update.

Shortly thereafter, I noticed that all of my Office 365 Business applications were missing: Outlook, Word, Excel, PowerPoint, etc. I assume that there were updates to those applications as part of version 1903, but since the update failed, I was left without any of those apps. Fortunately, I was able to easily re-install those apps without requiring any CD/DVD installer or password/serial number combinations. If you have an Office 365 Business account, use the following steps:

From there, simply follow the instructions and in a few short minutes you should be back in business, both figuratively and literally. Hope this helps!

Sunday, June 16, 2019

Location Services Double Fail

A couple weeks ago, the clutch on my car died, and I was stranded on the road. Fortunately, I have free roadside assistance as part of my car insurance policy and called the toll-free number to schedule a tow. There was an option to speak to an agent and another option to pinpoint my location if I had a mobile phone. I opted for the latter, hoping to use modern technology to expedite my request. I was sent a text message with a link to begin my request:


So far so good. Upon clicking the link, I was taken to page on my web browser where it asked me to enter my vehicle location:


It stated that location services were required in order to use the map. Although I confirmed that I had enabled Location Services on my iPhone in Settings > Privacy > Location Services, I hadn't additionally enabled location services for my web browser (Safari). Not having realized that at the time, I decided to try entering my location in the search bar instead. I was at the corner of Sepulveda Blvd and National Blvd, so tried entering that intersection to no avail. It required an actual street address, not an intersection.

Feeling like this was taking too long, I abandoned the high-tech option and tapped a phone icon on the webpage which connected me to a live agent at All City Tow Service. I verified my insurance plan and told her my location (intersection of Sepulveda Blvd and National Blvd), and she said a tow truck should arrive in 45 minutes. Hooray for humans—a triumph over technology! Humans 1, Technology 0. I also received a text message confirmation from All City Tow Service.


I noticed the discrepancy between what the All City Tow Service agent told me (45 minutes) vs. the text message confirmation (90 minutes). Otherwise, all the other information looked correct. As I waited for the tow truck, I made work-related phone calls. About 90 minutes later, the tow truck still had not arrived. I clicked on the text message link to the website again, and given that my location was manually entered by the live agent, I was taken directly to a map:


I noticed immediately that the pin was placed on the wrong intersection (again, my car was at the corner of Sepulveda Blvd and National Blvd, but the pin was on the other side of the freeway). Fearing that the tow truck driver would not find me, I called All City Tow Service to have them update my location. It turns out that the tow truck driver went to the pinned location, did not see me, and left. So they dispatched a 2nd tow truck driver, and I provided a physical street address on Sepulveda Blvd that they could correctly enter for my location. I was given a wait time of 30 minutes. That was a little frustrating, but 30 minutes didn't seem that bad. Plus, a parking enforcement officer had come moments earlier and set up cones in the road to help divert traffic around my car which was blocking the middle lane of a 3-lane street, so I was not concerned about traffic safety.

About 45 minutes later, there was no tow truck in sight. I called All City Tow Service again to confirm that they had the correct address, and they confirmed the street address. However, something seemed to have gone awry with the 2nd tow truck driver (they did not answer my question about what exactly happened), so they dispatched a 3rd driver, and I was given a wait time of 45 minutes.


It was lunchtime anyway, so I grabbed a burger and continued waiting curbside. Another independent tow truck driver pulled up and offered to tow my car for $60. I was slightly tempted to take the offer but declined. Fortunately, the 3rd tow truck arrived almost exactly 45 minutes later, and I had my car towed to the mechanic.



My total wait time was 3 hours. Humans 0, Technology 0.

Saturday, May 4, 2019

GoPro HERO7 Black Microphone Port

Earlier this year, I wrote about my new toy, a GoPro HERO7 Black. I've really enjoyed using its video capabilities. Normally I shoot in 2.7K at 60fps which gives me plenty of flexibility in making 1080p videos with cropping, image stabilization, or both.

Although I do have the case and various mounts, most commonly I shoot handheld videos without the casing. In doing so, I have discovered that sometimes I inadvertently cover up the microphone port with my fingers which muffles the sound. Given that the GoPro HERO7 Black is waterproof, I had always assumed incorrectly that the microphone was using the same port as the speakers on the bottom of the camera.

The owner's manual does not show the location of the microphone port, so I searched Google. All of the search results led me to external microphone products or general reviews of the camera. After doing some of my own testing, I discovered that there is a separate microphone port on the side of the camera—it's the tiny hole above the power button, as shown in the upper left portion of this image:



So for those of you who shoot handheld videos with the GoPro HERO7 Black and were wondering the same thing, I hope this helps you too.

Wednesday, March 20, 2019

Airline Elite Status + Basic Economy Fare = ?

I have Platinum status (50,000 miles + $6,000 in one calendar year) on American Airlines. Benefits include complimentary auto-requested first class upgrades on short flights, early upgrade confirmations, mileage bonuses, priority checkin, 2 free checked bags, ability to select seats with extra legroom at no extra cost, and a variety of other perks.

In the last several years, many airlines have introduced low-cost airplane tickets that have certain restrictions. American Airlines has a Basic Economy Fare that has the following rules:


Have you ever wondered what would happen if an American Airlines customer with elite status (i.e., Gold, Platinum, Platinum Pro, or Executive Platinum) were to buy a Basic Economy Fare? Which rules would prevail? Specifically, the benefit that I care about the most is the ability to select a seat with extra legroom, and that comes with all levels of elite status.

As I was booking my American Airlines flight on Expedia, it defaulted to the Basic Economy Fare for $331 and asked for an additional $160 to get around the restrictions above. Since there was an Expedia policy to allow for free cancellations within 24 hours of booking, I selected the Basic Economy Fare, completed my transaction, and then went to the American Airlines website to see if I could leverage my Platinum status to select a seat. What do you think happened? Drumroll please...

The Basic Economy Fare restrictions trump the Platinum status benefits. Boo! Hiss! I have never achieved Platinum Pro or Executive Platinum, but I assume that the Basic Economy Fare restrictions prevail over any kind of elite status. I also assume that other airlines would have the same policies, but I have not personally verified. In any case, thank goodness for Expedia's 24-hour free cancellation policy. Turns out that I found a better flight on Southwest for less money. Hooray, Digital Daddy for the win!

Sunday, February 24, 2019

ECG on Apple Watch Series 4



You may be aware that there is a new ECG app on the Apple Watch Series 4. An Apple Support page provides instructions on how to use the app and interpret the results. Since I'm a doctor and a geek, I'll try to provide a little more context about the Apple Watch ECG capabilities in layman's terms.

The Apple Watch ECG tracing (a portion of mine is pictured above) is a subset of what is formally known as a "12-lead ECG" that might be used in doctor's offices and hospitals. A full 12-lead ECG might look something like this:


It's called a 12-lead ECG because there are 12 combinations of the leads that are placed on a patient's body, with each lead representing the electrical signals between 2 points on the body. Those 12 leads are I, II, III, aVR, aVL, aVF, V1, V2, V3, V4, V5, and V6. The placement of those 12 leads on a patient's body and the understanding of the differences between those leads are beyond the scope of this blog, but suffice it to say that in certain scenarios, it is important to look at ECG tracings from multiple leads to tell what is going on.

A 12-lead ECG can reveal many different kinds of findings, such as:
  • Arrhythmias: atrial fibrillation, atrial flutter, ventricular tachycardia, ventricular fibrillation, Wolf-Parkinson-White syndrome, sick sinus syndrome (tachy-brady syndrome), atrioventricular nodal reentrant tachycardia, multifocal atrial tachycardia, wandering atrial pacemaker, 1st/2nd/3rd-degree atrioventricular block, premature atrial contractions, premature ventricular contractions, long QT syndrome, asystole, and many others
  • Ischemia (insufficient supply of oxygen to heart muscles): unstable angina and acute myocardial infarction (heart attack)
  • Structural abnormalities: cardiac aneurysms, dextrocardia, congenital heart defects, hypertrophic obstructive cardiomyopathy, atrial septal defects, and others
  • Miscellaneous: hyperkalemia, hypokalemia, hypercalcemia, hypocalcemia, digoxin effect, pericarditis, and many others
The Apple Watch Series 4 (and presumably beyond) can identify normal sinus rhythm (i.e., a normal rhythm that is found in healthy hearts) and atrial fibrillation (an abnormal heart rhythm in which there is no predictable periodicity to the heartbeats and the notable absence of a certain kind of electrical signal known as a P wave on the ECG), but it cannot currently identify any other problems such as the partial list above.

After demonstrating success with the detection of atrial fibrillation, I think it would be fairly straightforward for Apple to identify several other kinds of arrhythmias (from the partial list above) on a Series 4 Apple Watch simply by updating the software, and I predict that we will see this capability sometime soon. However, it makes a lot of sense to start with identifying atrial fibrillation because it is one of the most common cardiac arrhythmias, has potentially serious consequences if left undetected and untreated, and is fairly straightforward to computerize its detection on ECG.

That being said, there are some conditions such as detecting heart attacks that are unlikely to be performed on an Apple Watch because a heart attack results in ECG changes in some leads but not others, depending on its location. That is why we use all 12 leads to look for signs of ischemia in all regions of the heart. The Apple watch ECG tracing is more or less equivalent to lead I on a 12-lead ECG. It is essentially a 1-lead ECG or a "telemetry strip" reading.

I hope this sheds some light on the Apple Watch ECG app's current capabilities and limitations. Tim Cook recently stated, "if you zoom out into the future, and you look back, and you ask the question, 'What was Apple's greatest contribution to mankind,' it will be about health." With Apple's introduction of HealthKit (June 2014), the Health app (June 2014), ResearchKit (March 2015), CareKit (March 2016), and now the ECG app (December 2018), I think Apple is in an excellent position to do just that.