Files
opencv-test/2016-06-17-opencv-dfof.ipynb

784 lines
288 KiB
Plaintext
Raw Normal View History

2018-11-16 16:24:21 -08:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"OpenCV Version : 3.1.0\n",
"Numpy Version : 1.10.4\n"
]
}
],
"source": [
"import os\n",
"from timeit import default_timer as timer\n",
"import cv2\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"#import h5py\n",
"import tifffile\n",
"#from joblib import Parallel, delayed\n",
"%matplotlib inline\n",
"print(\"OpenCV Version : {0}\".format(cv2.__version__))\n",
"print(\"Numpy Version : {0}\".format(np.__version__))"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def playMovie(A,newMinMax=False):\n",
" #play movie in opencv after normalizing display range\n",
" #A is float input (float32)\n",
" #newMinMax is an optional tuple of length 2, the new display range\n",
" #Note: the array normalization is done inplace, thus the array will be rescaled outside scope of this function (but will still be float32)\n",
" cv2.startWindowThread()\n",
" cv2.namedWindow(\"raw\", cv2.WINDOW_NORMAL) #Create a resizable window\n",
" i = 0\n",
" \n",
" #if newMinMax:\n",
" #im = cv2.normalize(im, None, newMinMax[0], newMinMax[1], cv2.NORM_MINMAX)\n",
" #im = cv2.normalize(im, None, newMinMax[0], newMinMax[1], cv2.NORM_L2)\n",
" #im = cv2.equalizeHist(im)\n",
" #im,cdf = histeq(im)\n",
" #im -= newMin\n",
" #im *= newSlope\n",
" #cv2.normalize(im,im,newMinMax[0],newMinMax[1],cv2.NORM_MINMAX)\n",
" \n",
" #Normalize movie range and change to uint8 before display\n",
" A = np.reshape(A, (sz[0], A.size/sz[0]))\n",
" meanA,stdA = cv2.meanStdDev(A)\n",
" print(\"mean: {0}, std: {1}\".format(meanA,stdA))\n",
" \n",
" if newMinMax == False:\n",
" newMin = meanA - 3*stdA\n",
" newMax = meanA + 7*stdA\n",
" else:\n",
" newMin = newMinMax[0]\n",
" newMax = newMinMax[1]\n",
" \n",
" newSlope = 255.0/(newMax-newMin)\n",
" #A += abs(np.amin(A))\n",
" cv2.subtract(A, newMin, A)\n",
" cv2.multiply(A, newSlope, A)\n",
" A = np.reshape(A, sz)\n",
" A = A.astype('uint8', copy=False)\n",
" \n",
" while True:\n",
" #im = np.uint8(A3[:,:,i] * 255)\n",
" im = A[i,:,:]\n",
" #im = cv2.GaussianBlur(im,(0,0),3)\n",
" #th,bw = cv2.threshold(im,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)\n",
" #bw = cv2.adaptiveThreshold(im,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,0)\n",
" im = cv2.applyColorMap(im, cv2.COLORMAP_JET)\n",
" cv2.imshow('raw',im)\n",
" k = cv2.waitKey(10) \n",
" if k == 27: #if esc is pressed\n",
" break\n",
" if k == ord('b'):\n",
" i -= 1000\n",
" elif k == ord('f'):\n",
" i += 1000\n",
" else:\n",
" i += 1\n",
" if (i > (A.shape[0]-1)) or (i < 0) :\n",
" i = 0\n",
"\n",
" cv2.destroyAllWindows()\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/ackman/anaconda/envs/py35/lib/python3.5/site-packages/tifffile/tifffile.py:1974: UserWarning: tags are not ordered by code\n",
" warnings.warn(\"tags are not ordered by code\")\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"(3000, 540, 640)\n",
"False\n",
"1.6386002310318872\n",
"False\n",
"(3000, 540, 640)\n",
"3\n",
"(540, 640)\n",
"2\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x111ed6c50>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAS4AAAEACAYAAAAN5psFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmwZdd13vc79943jz2i0Y0G0BgFggAHAWREUiRIaiAl\n2xpsOVJKtmk7jqKU48SOS7biWGJS5XhSyanEjhw7smyVbFNSJEsMTUmUOJjUBIogwQEDMQONnqc3\nj/fekz/2/mGt2yQajG24zXKfqlfvvXvPuPfa3/rWt9bep2nblmvbte3adm37eto6V/sGrm3Xtmvb\nte3/73YNuK5t17Zr29fddg24rm3Xtmvb1912Dbiubde2a9vX3XYNuK5t17Zr29fddg24rm3Xtmvb\n1932qgFX0zTvaZrm8aZpnmia5q+8Wte5tl3brm3/6W3Nq1HH1TRNB3gCeDdwEvgD4Pvbtn383/vF\nrm3Xtmvbf3Lbq8W43gQ82bbt823b7gIfAL7rVbrWte3adm37T2x7tYDrCHA8/f9i/ezadm27tl3b\n/p23a+L8te3adm37utt6r9J5TwA3pv9vqJ+9tDVNc22S5LXt2nZtu+LWtm3z1T5/tYDrD4Dbmqa5\nCTgFfD/wA1+x19t+HO5/P3SB8frZLjAAGsrnG8AEMATaesfbdf9L9f9hPa5P4ZDb9fhxYKf+7Xl2\n6s8W8fTbwFi97qCeo1Ov9+L74eb3l32n6rHuv1X/3qrHUX9vp306ad+Fus94veduPWdT7937HdbP\nqJ936//b9Z4bYLp+PgE8/n64q97jGDCZnmGQ2miinq+tv8fq326T9R626r4AM/W39+n5d+uxa/Ve\nBsCFep21eswmsEgRCS4AH3t/6e9+6ou2Pof3uFWvNVGvsV73G6/X2K37jAGrhF209e+xus90/Wys\nPoP33tb797nb2q4rtb2++H64u7blav1e+xvW+2hSH3iesfSdba7Nea5uPWYjnWNw2bl36n7a4Ww9\ndpLSbpPAp98P73h/ue+d+tlm6pvN9OzddB0I+50l7Gmy/t0l7NI2b2p77tR+8Rj/d6x26n4L9fpD\n4A/eD29+f/mb1A576/G9+tNJny/X628Bf/+rYhbwKoWKbdsOgD8PfAR4BPhA27aPfcWOA2KAaCDb\nlIak/r1IGNwMMei2692P1/+zwbT1/4v1GEFqlegQjXedMBy/6xCdoWH2KB0yTumgtXrdHYohDghA\n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\npTDdo5Ry5MP1vIYcOxS
"text/plain": [
"<matplotlib.figure.Figure at 0x1108bcc88>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"t0 = timer()\n",
"fn = '/Users/ackman/Desktop/140509_21.tif'\n",
"#fn = '/Users/ackman/Data/2photon/120518i/120518_07_fr1-300.tif'\n",
"with tifffile.TiffFile(fn) as tif:\n",
" A = tif.asarray()\n",
"\n",
"del(tif)\n",
"print(A.shape)\n",
"print(np.isfortran(A))\n",
"sz = A.shape\n",
"A = A.astype('float32', copy=False)\n",
"Amean = np.mean(A,axis=0)\n",
"#A = np.rollaxis(A, 0, 3)\n",
"#A = np.reshape(A, (A.shape[0], A.size/A.shape[0]))\n",
"t0=timer()\n",
"for i in np.arange(A.shape[0]):\n",
" A[i,:,:] = ((A[i,:,:] / Amean) - 1.0)\n",
"print(timer()-t0)\n",
"print(np.isfortran(A))\n",
"print(A.shape)\n",
"print(A.ndim)\n",
"print(Amean.shape)\n",
"print(Amean.ndim)\n",
"plt.imshow(A[9,:,:])"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"mean: [[ 6.86191114e-10]], std: [[ 0.09794486]]\n"
]
}
],
"source": [
"playMovie(A)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x121f5a940>"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAS4AAAEACAYAAAAN5psFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmwZdd13vc79943jz2i0Y0G0BgFggAHAWREUiRIaiAl\n2xpsOVJKtmk7jqKU48SOS7biWGJS5XhSyanEjhw7smyVbFNSJEsMTUmUOJjUBIogwQEDMQONnqc3\nj/fekz/2/mGt2yQajG24zXKfqlfvvXvPuPfa3/rWt9bep2nblmvbte3adm37eto6V/sGrm3Xtmvb\nte3/73YNuK5t17Zr29fddg24rm3Xtmvb1912Dbiubde2a9vX3XYNuK5t17Zr29fddg24rm3Xtmvb\n1932qgFX0zTvaZrm8aZpnmia5q+8Wte5tl3brm3/6W3Nq1HH1TRNB3gCeDdwEvgD4Pvbtn383/vF\nrm3Xtmvbf3Lbq8W43gQ82bbt823b7gIfAL7rVbrWte3adm37T2x7tYDrCHA8/f9i/ezadm27tl3b\n/p23a+L8te3adm37utt6r9J5TwA3pv9vqJ+9tDVNc22S5LXt2nZtu+LWtm3z1T5/tYDrD4Dbmqa5\nCTgFfD/wA1+x19t+HO5/P3SB8frZLjAAGsrnG8AEMATaesfbdf9L9f9hPa5P4ZDb9fhxYKf+7Xl2\n6s8W8fTbwFi97qCeo1Ov9+L74eb3l32n6rHuv1X/3qrHUX9vp306ad+Fus94veduPWdT7937HdbP\nqJ936//b9Z4bYLp+PgE8/n64q97jGDCZnmGQ2miinq+tv8fq326T9R626r4AM/W39+n5d+uxa/Ve\nBsCFep21eswmsEgRCS4AH3t/6e9+6ou2Pof3uFWvNVGvsV73G6/X2K37jAGrhF209e+xus90/Wys\nPoP33tb797nb2q4rtb2++H64u7blav1e+xvW+2hSH3iesfSdba7Nea5uPWYjnWNw2bl36n7a4Ww9\ndpLSbpPAp98P73h/ue+d+tlm6pvN9OzddB0I+50l7Gmy/t0l7NI2b2p77tR+8Rj/d6x26n4L9fpD\n4A/eD29+f/mb1A576/G9+tNJny/X628Bf/+rYhbwKoWKbdsOgD8PfAR4BPhA27aPfcWOA2KAaCDb\nlIak/r1IGNwMMei2692P1/+zwbT1/4v1GEFqlegQjXedMBy/6xCdoWH2KB0yTumgtXrdHYohDghA\n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\npTDdo5Ry5MP1vIYcOxS
"text/plain": [
"<matplotlib.figure.Figure at 0x12196b160>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(A[9,:,:])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This takes just 0.32 s to read in 300fr array at its ** default uint16.**\n",
"And takes 0.78 s to read in array and cast as float64.\n",
"Matlab takes 2.11 s to read in same array into a float64.\n",
"\n",
"\n",
"Takes 13 s read in 3000fr array and convert to float64.\n",
"Takes just 4.5s to read in 3000fr array as default uint16.\n",
"Takes 4.6s to read in 3000fr array as float32 with astype(copy=False)\n",
"\n",
"\n",
"Reshaping the array can change from c index ordering to fortran ordering. Reshaping can also end up making a copy, so timing needs to be tested carefully."
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 loop, best of 3: 389 ms per loop\n",
"1 loop, best of 3: 392 ms per loop\n",
"1 loop, best of 3: 429 ms per loop\n"
]
}
],
"source": [
"%timeit np.mean(A,axis=0)\n",
"A = np.reshape(A, (A.shape[0], A.size/A.shape[0]))\n",
"%timeit np.mean(A,axis=0)\n",
"%timeit np.mean(A,axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With the stridetracks 3D vectorized dfof it is slow: \n",
"\n",
"* <1 for the dfof calculation for 300fr float64.\n",
"* 13 s for the dfof calculation for 3000fr float64.\n",
"* 1.8 s - 5s for the dfof calculation for 3000fr float32\n",
"\n",
"With a for loop iterating over frames it is fast: \n",
"\n",
"* 0.5 ms for the dfof calculation for 3000fr float32 in a for loop by frames"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1000 loops, best of 3: 159 µs per loop\n",
"10000 loops, best of 3: 171 µs per loop\n",
"10000 loops, best of 3: 94.3 µs per loop\n",
"The slowest run took 6.75 times longer than the fastest. This could mean that an intermediate result is being cached.\n",
"10000 loops, best of 3: 114 µs per loop\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x118997f60>"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nR2OUflxJpBpHKUo/uaY
"text/plain": [
"<matplotlib.figure.Figure at 0x1183aa198>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%timeit (A[0,:,:] / Amean)\n",
"%timeit (cv2.divide(A[0,:,:], Amean))\n",
"\n",
"im2 = A[0,:,:] / Amean\n",
"%timeit im2 - 1\n",
"#plt.imshow((A[0,:,:] / Amean) - 1.0)\n",
"\n",
"im = cv2.divide(A[0,:,:], Amean)\n",
"%timeit cv2.subtract(im, 1)\n",
"plt.imshow(im)"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1000 loops, best of 3: 500 µs per loop\n"
]
}
],
"source": [
"%timeit dfof(A,Amean)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 loop, best of 3: 7.17 s per loop\n",
"4737.88984468\n",
"1648.2682435\n",
"1 loop, best of 3: 933 ms per loop\n",
"[[ 4737.88984468]]\n",
"[[ 1648.26814388]]\n"
]
}
],
"source": [
"#A = np.reshape(A,sz)\n",
"#A = np.reshape(A, (A.size/sz[2], sz[2]))\n",
"#print(A.shape)\n",
"#print(A.dtype)\n",
"#t0=timer()\n",
"%timeit np.std(A) \n",
"meanA = np.mean(A)\n",
"stdA = np.std(A)\n",
"print(meanA)\n",
"print(stdA)\n",
"#print(timer()-t0)\n",
"#print(meanA)\n",
"#t0=timer()\n",
"%timeit cv2.meanStdDev(A)\n",
"cvMean,cvStd = cv2.meanStdDev(A)\n",
"print(cvMean)\n",
"print(cvStd)\n",
"#print(timer()-t0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Array shape matters for opencv calculations:\n",
"\n",
" for float32 roll axis (x,y,z):\n",
" np mean 1 loop, best of 3: 425 ms per loop\n",
" cv2 mean 1 loop, best of 3: 12.9 s per loop\n",
"\n",
" for float32 tifffile default (z,x,y): \n",
" np mean 1 loop, best of 3: 428 ms per loop\n",
" cv2 mean 1 loop, best of 3: 345 ms per loop\n",
"\n",
"\n",
" for float32 tifffile default (z,x,y):\n",
" np std 1 loop, best of 3: 3.49 s per loop\n",
" cv2 meanStdDev 1 loop, best of 3: 944 ms per loop\n",
"\n",
" for float32 tifffile default with reshape (z, x*y) (still c-style ordering): \n",
" np std 1 loop, best of 3: 3.48 s per loop\n",
" cv2 meanStdDev 1 loop, best of 3: 265 ms per loop\n",
"\n",
" np mean and std values: \n",
" 4737.88\n",
" 1648.28\n",
" cv2 mean and std values: \n",
" [[ 4737.88984468]]\n",
" [[ 1648.26814388]]\n",
"\n",
"\n",
" for uint16 tifffile default (z,x,y): \n",
" np mean and std values: \n",
" 1 loop, best of 3: 7.17 s per loop\n",
" 4737.88984468\n",
" 1648.2682435\n",
" cv2 mean and std values: \n",
" 1 loop, best of 3: 933 ms per loop\n",
" [[ 4737.88984468]]\n",
" [[ 1648.26814388]]\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"float32\n",
"0\n",
"()\n",
"float64\n",
"2\n",
"(1, 1)\n"
]
}
],
"source": [
"print(stdA.dtype)\n",
"print(stdA.ndim)\n",
"print(stdA.shape)\n",
"print(cvStd.dtype)\n",
"print(cvStd.ndim)\n",
"print(cvStd.shape)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 1435.94999875]]\n",
"[[ 12987.09259954]]\n",
"4.172961006057449\n",
"6.8788205049932\n",
"(3000, 540, 640)\n"
]
}
],
"source": [
"meanA,stdA = cv2.meanStdDev(A)\n",
"newMin = meanA - 3*stdA\n",
"newMax = meanA + 7*stdA\n",
"print(newMin)\n",
"print(newMax)\n",
"t0=timer()\n",
"A -= newMin\n",
"A *= 255.0/(newMax-newMin)\n",
"print(timer()-t0)\n",
"\n",
"t0=timer()\n",
"#np.clip(A, 0, 255, out=A)\n",
"A.clip(0, 255) #faster than the documented np.clip(A,min,max,out=A) which should be inplace. Possible version/memory leak issue\n",
"print(timer()-t0)\n",
"print(A.shape)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3.87034606934\n",
"0.973430871964\n",
"2.72590303421\n"
]
}
],
"source": [
"A = np.reshape(A, (A.size/sz[2], sz[2]))\n",
"\n",
"t0=timer()\n",
"meanA = np.mean(A) \n",
"stdA = np.std(A)\n",
"newMin = meanA - 2*stdA\n",
"newMax = meanA + 5*stdA\n",
"print(timer()-t0)\n",
"\n",
"t0=timer()\n",
"A -= newMin\n",
"A *= 255.0/(newMax-newMin)\n",
"print(timer()-t0)\n",
"\n",
"t0=timer()\n",
"#np.clip(A, 0, 255, out=A)\n",
"A.clip(0, 255) #faster than the documented np.clip(A,min,max,out=A) which should be inplace. Possible version/memory leak issue\n",
"print(timer()-t0)\n",
"\n",
"A = np.reshape(A,sz)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"with 300fr float64:\n",
"\n",
" <few s\n",
"\n",
"with 3000fr float64: \n",
"\n",
" 55.4744589329\n",
" 22.1628820896\n",
" 75.272135973\n",
"\n",
"with 3000fr float32: \n",
"\n",
" 4.15756678581\n",
" 0.929126977921\n",
" 2.98598194122\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#playMovie(A,(newMin,newMax))\n",
"playMovie(A)\n",
"#playMovie(A.astype('uint8', copy=False))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(3000, 345600)\n",
"The slowest run took 11.03 times longer than the fastest. This could mean that an intermediate result is being cached.\n",
"1000000 loops, best of 3: 978 ns per loop\n",
"(3000, 540, 640)\n"
]
}
],
"source": [
"A = np.reshape(A, (sz[0], A.size/sz[0]))\n",
"#%timeit np.reshape(A, (sz[0], A.size/sz[0]))\n",
"print(A.shape)\n",
"#%timeit cv2.meanStdDev(A)\n",
"%timeit np.reshape(A, sz)\n",
"A = np.reshape(A, sz)\n",
"print(A.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A reshaped into 2D: \n",
"cv2 meanStdDev: 295 ms\n",
"\n",
"A as default 3D: \n",
"cv2 meanStdDev: 1030 ms\n",
"\n",
"np.reshape 2D: 2.61 µs\n",
"np.reshape 3D: 974 ns\n",
"\n",
"So it is worth reshaping the array into 2D before doing array calcs in opencv."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.0874224869767204\n"
]
}
],
"source": [
"t0=timer()\n",
"A = np.reshape(A, (sz[0], A.size/sz[0]))\n",
"meanA,stdA = cv2.meanStdDev(A)\n",
"newMin = meanA - 3*stdA\n",
"newMax = meanA + 7*stdA\n",
"newSlope = 255.0/(newMax-newMin)\n",
"#A -= newMin\n",
"#A *= newSlope\n",
"cv2.subtract(A, newMin, A)\n",
"cv2.multiply(A, newSlope, A)\n",
"A = np.reshape(A, sz)\n",
"print(timer()-t0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With cv2 substract and multiply: 1.85 s\n",
"With np inplace operators for subtract and multiply: 3.41 s"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"A = cv2.imread('/Users/ackman/Desktop/140509_21.tif', -1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This only reads in a single frame using cv2 to read in the tiff. The <0 flag indicates not to convert to 8bit automatically."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"uint16\n",
"(6000, 540, 640)\n",
"False\n"
]
}
],
"source": [
"#print(np.amin(A))\n",
"#print(np.amax(A))\n",
"print(A.dtype)\n",
"print(A.shape)\n",
"print(np.isfortran(A))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/ackman/anaconda/envs/py35/lib/python3.5/site-packages/tifffile/tifffile.py:1974: UserWarning: tags are not ordered by code\n",
" warnings.warn(\"tags are not ordered by code\")\n"
]
}
],
"source": [
"A = tifffile.imread([fn,fn])"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"A = np.reshape(A, (A.shape[0]*A.shape[1], A.shape[2], A.shape[3])) #reshape multiple arrays into one"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([2])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.arange(2,3)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 0
}