我不知道你會怎麼做,numpy
和opencv
,因爲我使用ImageMagick(它安裝在大多數Linux發行版上,可用於OSX和Windows),但這個概念應該適用。
首先,我可能會去索貝爾濾波器旋轉找到水平邊緣 - 即方向濾波器。
convert chemistry.jpg -morphology Convolve Sobel:90 sobel.jpg
然後我可能會看看添加一個Hough變換找到水平邊緣檢測圖像中的線條。所以,我的一行看起來像這樣在終端/殼:
convert chemistry.jpg -morphology Convolve Sobel:90 -hough-lines 5x5+30 level.jpg
如果我在一些調試添加,就可以看到Sobel濾波器係數:
convert chemistry.jpg -define showkernel=1 -morphology Convolve Sobel:90 -hough-lines 5x5+30 sobel.jpg
Kernel "[email protected]" of size 3x3+1+1 with values from -2 to 2
Forming a output range from -4 to 4 (Zero-Summing)
0: 1 2 1
1: 0 0 0
2: -1 -2 -1
如果我添加一些更多的調試,你可以看到檢測到的線的座標:
convert chemistry.jpg -morphology Convolve Sobel:90 -hough-lines 5x5+30 -write lines.mvg level.jpg
lines.mvg
# Hough line transform: 5x5+30
viewbox 0 0 86 196
line 0,1.52265 86,18.2394 # 30 <-- this is the topmost, somewhat diagonal line
line 0,84.2484 86,82.7472 # 40 <-- this is your actual level
line 0,84.5 86,84.5 # 40 <-- this is also your actual level
line 0,94.5 86,94.5 # 30 <-- this is the line just below the surface
line 0,93.7489 86,95.25 # 30 <-- so is this
line 0,132.379 86,124.854 # 32 <-- this is the red&white valve(?)
line 0,131.021 86,128.018 # 34
line 0,130.255 86,128.754 # 34
line 0,130.5 86,130.5 # 34
line 0,129.754 86,131.256 # 34
line 0,192.265 86,190.764 # 86
line 0,191.5 86,191.5 # 86
line 0,190.764 86,192.265 # 86
line 0,192.5 86,192.5 # 86
正如我在我的評論說,請想想也是,也許照亮您的實驗 - 或者與不同顏色的光,更瀰漫的燈光,不同的方向燈。另外,如果您的實驗情況隨着時間的推移,你可以考慮在看圖片,看看哪些線移動之間的差異...
這裏是原始圖像的頂部行:
如何關於向我們展示幾幅樣本圖片?和你當前的代碼。 –
我不清楚你想要測量什麼。我不是化學家,但我可以在圖片左側看到一個倒轉的梨形玻璃物,它看起來有兩個水位,右邊是一個高大的狹窄的,直邊的,可能是玻璃的東西。在它裏面似乎也有兩個水位......你想要哪四項? –
對不起,我應該只保留裁剪圖像。那麼我只是想找出倒置的梨形玻璃的液位。正如你可以看到其中2個水位,上面的是實際的水位。這是肉眼難題本身的複雜性,很難弄清哪一個是水位。這只是我拍攝的示例圖像,我希望我的算法能夠識別任何透明物體中的液位,並給出深色,恆定的背景。 – DarshanJoshi