你的問題不是很明確提出,但我花了一些關於它的時候,感覺就像分享我的想法。我並不是假設這是一個完整或嚴格的答案 - 只是一些可能會給你一些想法的思考。另外,我使用ImageMagick,但是如果您擁有並瞭解Matlab,則應該使用它 - 我不建議您切換工具。
首先,我做了Canny邊緣檢測是這樣的:
convert http://i.stack.imgur.com/XITAE.png -canny 0x1+15%+50% canny.jpg
,讓我:
![enter image description here](https://i.stack.imgur.com/tVsb0.jpg)
我再「南瓜」下來,直到它僅僅是1像素高,這有效地總計和平均所有的列 - 我在這裏10個像素高,所以你可以看到它。它是白色的,有很多拋物線,其他地方很少。
![enter image description here](https://i.stack.imgur.com/Dff1r.jpg)
然後我伸出備份至原始圖像的完整高度和模糊了一點 - 注意,一切都交給下面的圖片是隻有一行的「代碼」:
convert http://i.stack.imgur.com/XITAE.png -canny 0x1+15%+50% -resize x1! -normalize -resize 827x310! -blur 0x11 -colorspace gray mask.png
我然後用上面的不透明蒙了紅色的圖像大小相同的原始這樣的:
convert -size 827x310! xc:red mask.png -compose copy-opacity -composite colouredmask.png
![enter image description here](https://i.stack.imgur.com/DIt7P.png)
然後,我把你的原始圖像,並通過首先創建一個黃色圖像,然後融合到你的圖像,然後我混合從上面最重要的是紅色圖像,黃色這樣的顏色的它:
convert -size 827x310! xc:yellow yellow.png
convert http://i.stack.imgur.com/XITAE.png yellow.png -compose colorize -composite colouredmask.png -compose overlay -composite result.png
![enter image description here](https://i.stack.imgur.com/dr3ZA.png)
給
![enter image description here](https://i.stack.imgur.com/yolEz.png)
很明顯,你可以設定不同的對米,並使用不同的閾值和事物,但它有點像你所瞄準的那種東西。
所以整個過程是:
# Make mask of peaky areas - line 1
convert http://i.stack.imgur.com/XITAE.png -canny 0x1+15%+50% -resize x1! -normalize -resize 827x310! -blur 0x11 -colorspace gray mask.png
# Colour mask with red - line 2
convert -size 827x310! xc:red mask.png -compose copy-opacity -composite colouredmask.png
# Tint original image with yellow and then overlay semi-transparent red area
convert -size 827x310! xc:yellow yellow.png
convert http://i.stack.imgur.com/XITAE.png yellow.png -compose colorize -composite colouredmask.png -compose overlay -composite result.png
注意
擠壓像素...對不起我的術語迷惑你!基本上,當我將像素向下擠壓到一行時,您需要想象在圖像頂部放置一塊磚,並將其平展到僅一個像素高。因此,本質上,您在圖像下繪製一條虛線,然後在整個圖像上工作,合計每個垂直列中的白色(即邊緣)像素的數量。具有更多白色像素的列將合計爲更大的數字。沒有白色像素的列將加起來爲零。一旦你得到了每列的總數,你會發現最高的總數 - 假設它是32,然後你將所有的總數乘以255/32,這樣一切都被歸一化爲255或者白色。現在壓扁的條表示每列中的edge energy
。然後,當我疊加時,我將其用作紅色的不透明度 - 因此Canny圖像中具有更多白色邊緣的列在結果中將顯示更多紅色。
讓我們來演示如果我縮小到10個像素寬和1個像素高之後會縮小到原始大小 - 基本上這意味着我的結果蒙版將只有10個可能的值(或列)列,並且每個列將是一個恆定的亮度。我把坎尼圖像的下方,所以你可以看到,壓扁帶的亮度表示edge energy
:
convert http://i.stack.imgur.com/XITAE.png -canny 0x1+15%+50% -resize 10x1! -normalize -scale 827x310! mask.png
![enter image description here](https://i.stack.imgur.com/r18qj.png)
![enter image description here](https://i.stack.imgur.com/r62tc.jpg)
如果你想介紹另一種顏色,你需要找出你的算法是用來控制顏色出現的位置。然後你再次做同樣的事情 - 你在你想要輸出圖像中的顏色的地方製作一個光線較暗的遮罩,在你不需要該顏色的地方使用該遮罩。然後使用該蒙版作爲新顏色的不透明度(正如我在上面標記爲line 2
的行中所做的那樣),然後像上面代碼的最後一行那樣覆蓋它。
向我們展示您嘗試過的。 – rayryeng
「不同」和「模糊」不是很具描述性的詞。你如何量化拋物線已經模糊了多少?您甚至不會告訴我們您認爲區域在您的示例圖像中的位置。據我所知,那個頂級圖像可能都是綠色的。 – beaker
將其放置在您的文章中。不要置評論中。它看起來很醜。 – rayryeng