ImageMagick 範例 --
模糊化和銳利化影像
模糊化及其相反的銳利化影像是影像處理中非常重要的面向。在本節中,我們將探討這兩者。
較小的半徑會將模糊效果限制在與被模糊像素距離在半徑值內的像素(一個正方形區域)。因此,使用非常小的半徑值,例如「
如您所見,模糊這樣的純色影像沒有問題。它會按預期工作。但是,如果我們嘗試使用包含透明背景的影像再次執行此操作...
等等,發生什麼事了!圖像沒有變化!實際上運算子確實有作用。但是「
總結一下...
從上面可以看出,「
請注意,我們沒有像使用黑色圓形那樣獲得不變的圖像,而是產生了一個可怕的黃色圓形,邊緣有黑色蔓延。真糟糕!這個問題是由於很少有新的 IM 使用者意識到的一個事實造成的。
請注意,顏色「#F000」是完全透明的紅色。也就是說,圖像的背景區域實際上是不可見的紅色,而不是更典型的完全透明的黑色。這對於以後的測試很重要。我們可以使用「
現在讓我們再次嘗試僅使用預設的「
如你所見,圖片中完全透明的紅色背景現在已蔓延到可見的黃色圓圈中,使其邊緣呈現有趣的橙色,就像之前一樣。你可能會喜歡這種效果,但生成這種效果有更好的方法,而不是依賴不可見的完全透明顏色。只需證明你可以正確地模糊這張圖片,讓我們正確地做…
使用 Alpha 色板模糊不會產生像以前那樣的橙色,原因是在當前的「
最後一個例子產生了如果 Alpha 色板和圖片中的顏色(透明或其他)之間絕對沒有交互作用,則純灰階運算子會產生的結果。也就是說,紅色、綠色、藍色和 Alpha 色板各自完全獨立地模糊處理,就好像它們是各自獨立的灰階圖片一樣。請記住,由於預設的「
請注意,sigma 設置(僅在放大步驟中使用)僅為實際所需的一半,因為您還將圖像大小加倍了。您可以通過調整縮小比例和給定的 sigma 值來使整體生成的模糊更大。縮小步驟是產生加速的步驟,但您至少應該在放大步驟中進行一些模糊處理以進行質量控制。這僅僅是該技術的一個示例。它實際上是用於處理非常大的圖像上的非常大的 sigma 值。例如,在使用 sigma 值為 10 或更大的現代數位照片中進行模糊處理時。此技術還用於在稀疏顏色牧羊犬,替代方案中生成單個圖像的多級模糊。
施工中
銳化是一種電腦圖形演算法,最常出現在電視節目和電影中。想像一下,警察試圖「清理」銀行搶匪汽車車牌的「放大」照片,或是在模糊的商店監視器畫面中辨識人臉,這就是我所說的。基本上,他們是在嘗試恢復圖像的精細細節,這些細節由於相機鏡頭的自然模糊或低解析度圖像而丟失。銳化參數?(展開)
「
如您所見,結果並不完美,因為將像素散佈會使圖像的銳利角落變得不那麼清晰。請特別注意圖像頂部兩條線條的角落處產生的額外加厚,以及細線幾乎消失的情況。即使重複操作或增加銳化區域的大小也無助於將圖像恢復到完全相同的原始狀態,因為您基本上已經從圖像模糊中丟失了更精細的細節。但是,宏觀細節可以很好地恢復。正是銳化演算法可以在模糊或高度放大的圖像中恢復更精細的細節,這使得警察、天文學家和政府情報機構使用的軟體套件價值不菲。
施工中
「
請注意陰影圖像是如何從圖像中正確偏移的。您甚至可以將模糊「sigma」值歸零並創建一個硬陰影,但半透明的陰影。
使用「
雖然最簡單的方式是使用 圖層合併,但這往往會改變最終影像的整體偏移量。 然而,偏移量並不是由分層方法造成的,而是因為 "
您可能會在這裡看到少量的裁剪,因為原始影像沒有足夠的額外空間來容納所需的陰影。
您可以看到,由於負偏移量,陰影被 "
另一種方法是在生成陰影後,將兩張影像都偏移適當的量。 這會在您將它們 "
所需的空間量至少應為 2×'sigma'-'offset',在本例中為 2×3--5 ⇒ 11 個像素,否則您可能會裁剪掉陰影。 然而,大約 'sigma'-'offset' 的空間通常會產生可接受的裁剪程度。 另一種方法是擴展原始影像,以便為最終陰影留出足夠的空間。 這是處理陰影的最佳方法,同時保留影像在虛擬畫布上的原始位置。 例如,在這裡,我用一些額外的空間填充原始影像以容納陰影,然後直接在下方放置陰影影像。 我在顯示的影像結果中包含了一個邊框,以便您可以看到最終影像仍然位於「填充」影像的中心。
所需的填充量至少應為「sigma」+ abs(「offset」),或最好是 2×「sigma」+ abs(「offset」),以確保陰影不會被裁剪。填充可以是不對稱的以減少空間,但通常為了方便起見,會使用對稱填充(如上所述)。
首先要記住的是,合成運算子的層級非常低,不會讀取任何圖層或虛擬畫布偏移量,原始影像或陰影運算子可能會有偏移量。事實上,我們仍然需要移除或調整使用Repage 設定新增的可能為負數(錯誤)的偏移陰影。這表示您在上述範例中看到的偏移量,僅僅是因為陰影放大輸入影像以提供陰影一些空間而產生的。陰影的位置完全取決於陰影影像擴展了 2 倍的 sigma。此外,如果您使用「硬陰影」(sigma 為零),則最終也不會有任何陰影偏移量,因此陰影將被原始影像隱藏,但可能會產生暗暈邊緣效果。您基本上已經放棄了陰影運算子提供的內建偏移量計算。當然,您可以改為計算並設定適當的合成幾何/重心設定,而最簡單的方法是使用「
請注意,由於影像順序已交換,因此置中的幾何偏移量為負數。
在這裡,您可以看到使用模糊形狀進行描邊的一個問題。由於模糊的工作原理,形狀的邊緣始終至少有 50% 的透明度。為了彌補這一點,您可以放大將產生陰影的影像形狀(例如,請參閱較密集的軟輪廓字體)。更好的方法是使用色階調整調整陰影影像的透明度,使形狀邊緣的 50% 透明度變為完全不透明。
另一種處理陰影位置和偏移量的方法是,基本上放棄所有「
不過請注意,此處的偏移量與您通常用於定位陰影的偏移量是相反的。這是因為您實際上是在偏移文字形狀而不是陰影,所以方向相反。但是,如果偏移量大於模糊「sigma」的兩倍,則此方法會裁剪原始來源影像,而不是陰影影像。因此,它不能用於「硬陰影」(使用「
但是,沒有提供用於設定該陰影的顏色、模糊度和偏移量的控制項,因為「
等效的 IM 操作將是...
請注意,上述值 8 是模糊 sigma 的兩倍,以便為模糊陰影提供足夠的空間。然而,這意味著最終影像將比 sigma 像素大 4 倍。為了進行補償,還會添加等量的負偏移量。現在,由於將對生成的影像添加 2 倍 sigma 負偏移量,因此應注意避免陰影被裁剪或相對於原始影像定位不正確。這可以通過為原始影像提供初始正偏移量(例如 8-5 或 +3+3 像素)來完成,或者使用圖層合併來完成,該操作可以理解負偏移量而不會裁剪最終影像。基本上,請使用先前的技術來正確處理陰影影像中可能涉及的負偏移量。
正如我所說,「
您可以將物件放置在偏離中心的位置(通過在圖像中添加一些空間),以獲得更有趣的「
模糊參數是徑向模糊覆蓋的角度。也就是說,從原始圖像開始,在每個方向上都有一半的角度。因此,180 度的角度覆蓋了半個圓,而 360 度的角度會將圖像模糊成一個完整的圓。
您甚至可以添加一點 圖像扭曲,使效果更有趣...
請注意,不僅物件會產生軌跡,而且運動方向的邊緣也會將背景模糊進去。這種前緣模糊可以通过重新繪製或疊加原始圖像並多次重新應用較小的「
可以製作多個運動模糊,以影響移動物件尾部的某種擴散。有點像消散的煙霧或火焰。
此技術可用於在地面上生成擴散的陰影。或者,您可以生成運動模糊,然後對其進行徑向模糊處理,儘管這需要一些圖像移位才能使中心位置正確。您還可以添加一些額外的 圖像扭曲,使事情變得更有趣...
請注意,雖然「
施工中
警告: 本節內容已過時,想要正確羽化圖像的用戶應該參考 使用距離羽化形狀。這裡顯示的是所謂的「模糊羽化」,如後文所示,這是一種「偽羽化技術」。儘管如此,它仍然是一種有用的方法,但僅適用於「凸面」圖像形狀。 從圖像中剪切形狀時,您通常希望稍微羽化或模糊形狀的邊緣,使其看起來更平滑,並淡化可能意外包含在形狀外部的任何部分,或者允許圖像融入背景而不會顯得像是複製貼上。基本上,不是讓某些形狀具有「硬」邊緣,而是將其軟化為「偽」抗鋸齒或鏡頭模糊,以便粘貼看起來更無縫。
但是,由於我疊加的是具有布林透明度的 GIF 圖像,因此邊緣有嚴重的鋸齒或階梯狀邊緣,圖像在背景上看起來非常不自然。如果您處理的是真實世界的圖像,上述結果將顯得非常人工化。
順便說一句,這與從縮圖生成 柔邊 所使用的技術完全相同。如需更多範例,請參閱 Fred Weinhaus 的「feather」遮罩腳本的結果。如您所見,當疊加圖像和背景之間存在高對比度時,這對於簡單的情況非常有效。但是,當您想使用更大的羽化模糊係數,或者兩個圖像都是非常淺的顏色時,就會出現嚴重的問題。
請注意,由於模糊會同時延伸到形狀區域的內部和外部,因此必須調整 Alpha 色板,以便形狀的邊緣為零(完全透明)。但隨著距離邊緣越來越遠,它會迅速變為完全不透明。 具有透明度處理的 CLUT 提供了此類 Alpha 色板調整的一個範例。這種調整至關重要,否則,您將添加形狀外部區域的半透明陰影或光暈,而不是淡化形狀外部區域。基本上是一些以前被圖像透明度隱藏的半透明「未定義顏色」。但是,模糊有一個特別棘手的問題,即也會平滑形狀的輪廓。例如...
如果您模糊此特定形狀,您將獲得...
請注意遮罩的點是如何比邊緣更被淡化的。以及內角如何看起來被「填充」,這在透明度方面可能導致完全透明的像素變為半透明。也就是說,具有未定義顏色的像素實際上可能會變得可見!如果我們對圖像進行閾值處理,您可以更清楚地看到這一點。
這就是使用「模糊」作為圖像羽化方法的問題。並且在處理手指、耳朵以及腿部之間的區域時尤其需要注意。也就是說,對附屬物本身的形狀和它們之間的空間的影響。如果圖像具有卡通般的邊框輪廓,「1 像素」的羽化就不是什麼大問題。但是對於沒有明確邊界的真實圖像來說,這是一個真正的問題。一個適當的解決方案是找到某種方法來衡量一個點距離形狀邊緣的距離,但兩個靠近的邊緣不會相互疊加它們的效果。這種距離測量操作現在已添加到 IM 中,稱為 距離形態學。有關將其用於羽化的詳細信息,請參閱 使用距離羽化形狀。
模糊化影像
模糊化影像使其變得模糊似乎不是一個有用的操作,但實際上對於產生背景效果和陰影非常有用。它對於平滑「鋸齒」的效果以 消除鋸齒 影像邊緣,以及圍繞特徵以產生突出顯示效果也非常有用。模糊化非常重要,它是 影像調整大小 的一個組成部分,儘管它是一種不同的模糊化方法,它被限制在原始影像單個像素的邊界內。ImageMagick 中有兩個通用的影像模糊運算子。「-gaussian-blur
」擴散和「-blur
」。兩者的結果非常接近,但由於「-blur
」是一種更快的演算法,因此即使前者在數學上更正確,通常也更喜歡它。(請參閱 模糊 vs 高斯模糊運算子。)模糊/高斯參數
「-blur
」和「-gaussian-blur
」的參數相同,但對於影像處理新手來說,參數值可能會令人困惑。-blur {radius}x{sigma}上面重要的設定是第二個 sigma 值。它可以被認為是想讓影像「擴散」或模糊多少像素的近似值。將其視為用於模糊化影像的筆刷大小。這些數字是浮點值,因此您可以使用像 '
0.5
' 這樣非常小的值。第一個值 radius,也很重要,因為它控制運算子在擴散像素時應該查看的區域大小。該值通常應為 '0
' 或至少是 sigma 的兩倍。為了向您展示選項的效果,讓我們以這個簡單的影像為例,它有很多周圍空間(模糊運算子需要很大的工作空間),並為各種運算子設定建立一個結果表。我還特意使用了一種包含粗線和細線的字體,以查看小線條細節和大面積顏色的模糊效果。
|
![]() |
1
」,實際上會將模糊效果限制在每個像素的直接相鄰像素內。請注意,雖然標準差是浮點數,但半徑不是。如果給定(或內部計算)浮點值,它會向上捨入到最接近的整數,以確定模糊的「鄰域」。每個鄰居對最終結果的貢獻程度仍然由標準差控制。非常小的標準差(小於「1
」)會將其貢獻限制在很小的範圍內,而較大的標準差會從所有鄰居那裡貢獻更多相等的值。最大的標準差「65355
」將產生方形鄰域中所有像素的簡單平均值。另請注意,對於較小的半徑但較大的標準差,您會在模糊結果中看到偽影出現。這在「-blur 5x8
」的輸出中尤其明顯。這是因為小的方形鄰域「切斷」了模糊區域,導致模糊的高斯曲線突然停止,從而在銳利邊緣產生振鈴效應。所以...
切勿對模糊使用小於標準差的半徑
理想的解決方案是簡單地將半徑設置為「0x
」,如上表最後一行所示。在這種情況下,運算子將嘗試根據給定的標準差自動確定最佳半徑。IM 會使用的最小半徑是 3,對於 IM Q16 版本通常是 3 * 標準差(IM Q8 使用較小的半徑,因為它的精度較低)。我唯一會使用非零半徑的情況是非常小的標準差或特殊模糊。所以..
如果可能,請對模糊運算使用零半徑
標準差的小值通常僅用於模糊線條和平滑未進行抗鋸齒處理的影像上的邊緣(有關更多資訊,請參閱抗鋸齒)。在這種情況下,我發現「1x0.3
」的模糊值可以有效去除影像中的大多數「鋸齒」。然而,較大的值可用於產生模糊影像、背景或陰影效果(請參閱複合字體),甚至影像突出顯示效果(如進階範例頁面所示)。由於 IM 處理「x
」樣式參數的方式,上述標準差是可選的。然而,它是更重要的值,因此應該是半徑可選,因為半徑可以自動確定。因此,對這些類型的卷積運算子的單一值參數是無用的。這不太可能改變,因為它已經很長時間了,並且會破壞太多東西。 模糊使用通道設置
為了演示模糊,讓我們先簡單地在淺藍色背景上生成一個模糊的黑色圓圈...
|
![]() ![]() |
|
![]() ![]() |
-blur
」作為一個灰階通道運算子,它會受到「-channel
」設定的限制,僅作用於三個顏色通道。這意味著只有圖像的三個顏色通道被模糊化,而透明度或 Alpha 通道保持不變。然而,在上例中,圖像是一個完全不透明的圓形,位於顏色為「none
」的背景畫布上,IM 將其定義為完全透明的黑色!這意味著我們有一個黑色的圓形,位於透明的黑色背景上。換句話說,圖像中的所有顏色都是黑色,某些部分不透明,而其他部分透明。因此,當我們模糊圖像時,我們只是將黑色與黑色模糊化,您可能已經猜到,結果還是黑色!因此結果的顏色沒有變化。此外,我們從未觸及圖像的 Alpha 或透明度通道,因此我們最終得到的圖像透明度保持不變。也就是說,仍然是一個黑色的圓形!我們真正想要做的是模糊所有四個圖像通道,特別是 Alpha 通道。為此,我們將「-channel
」設定設為圖像的所有四個通道(例如:使用值「RGBA
」)。
|
![]() |
模糊具有透明度的圖像時,請始終使用「
-channel RGBA
」設定。
![]() ![]() |
IM 5.5.7 版會自動模糊所有四個顏色通道,但該運算子對於具有透明度的圖像還有其他錯誤影響。有關詳細資訊,請參閱透明度模糊錯誤。 |
![]() ![]() |
某些圖像格式(如 GIF 和 JPEG)無法處理半透明像素。因此,我建議您盡可能對任何具有某種形式的半透明顏色的圖像使用 PNG 格式。 |
-channel
」設定對於「-blur
」等灰階運算子非常重要。但這並不是使用此類運算子時唯一需要注意的事情。例如,讓我們再次嘗試最後一個「忘記「-channel
」設定」的範例,但這次使用黃色的圓形。
|
![]() ![]() |
透明像素具有顏色,即使您看不到它。
在上述情況下,透明顏色是黑色,它滲入了黃色圓形中。當然,我們可以通過為透明圖像正確設定「-channel
」設定來解決此問題,這樣一來就能按預期工作。
|
![]() |
模糊內部
讓我們用一個更複雜的例子來進一步說明這一點,這將讓我們探索「-blur
」在內部究竟做了什麼。在這裡,我們建立了一個非常特殊的黃色圓形圖像,它是在完全透明的紅色背景上繪製的。這將讓我們看到透明顏色在模糊圖像時的影響。
|
![]() |
-alpha off
」運算子有效地刪除圖像的 Alpha 通道,從而看到圖像透明部分的顏色。
|
![]() |
RGB
」、「-channel
」設定來模糊圖像的顏色。
|
![]() |
|
![]() |
-channel
」設定下,當「-blur
」運算子發現 Alpha 色板被包含時,它只會使用根據該 Alpha 色板可見的像素進行模糊處理。如果未包含 Alpha 色板,它將完全忽略它,並且完全透明的紅色將與黃色混合產生各種深淺的橙色。基本上,模糊演算法已被修改為忽略圖片中所有完全透明的像素,無論它們是什麼顏色。任何半透明像素仍然會被包含,但它們對結果的影響也會根據它們的可見程度進行調整。結果是圓圈變成了一個模糊的半透明黃色斑點。這正是使用者可能想要實現的目標。如果你真的喜歡,你可以分別模糊顏色和 Alpha 色板,從而有效地斷開演算法對顏色通道的「可見度調整」。結果更像是陽光透過骯髒的棕色霧霾照射。
|
![]() |
-channel
」設定為「RGB
」,因此預設操作是不模糊 Alpha 色板,並且將圖片中不可見的顏色與可見的顏色混合模糊。你是否很慶幸「-blur
」不再始終是純灰階運算子?儘管你可以根據需要以這種方式使用它。然而,你並非總是有這種選擇…![]() ![]() |
在 IM 6.2.4-4 版之前,「-blur 」和「-gaussian-blur 」運算子被作為純灰階操作應用,因此不會根據其 Alpha 色板的「可見度」調整顏色權重。結果是任何形式的帶透明度的模糊處理幾乎總是會產生可怕的「黑色光暈」效果,例如在上一個例子中有意產生的效果。這被歸類為 IM 發佈版本中的一個主要的長期錯誤,而且是一個很難解決的錯誤。有關此問題的更多詳細資訊,請參閱帶透明度的模糊處理錯誤頁面。 |
FUTURE: Blur and Trimming Images.
模糊 vs 高斯模糊運算子
對於哪個運算子「-blur
」或「-gaussian-blur
」更適合用於模糊圖像,一直存在一些困惑。首先,「-blur
」速度更快,但它使用兩階段技術來實現這一點。首先沿著一個軸,然後沿著另一個軸。「-gaussian-blur
」運算子在數學上更正確,因為它可以同時沿所有方向模糊。兩者之間的速度成本可能非常巨大,根據模糊程度的不同,可能會相差 10 倍或更多。在更技術的背景下,「-blur
」是一個 2 通道、1 維正交卷積濾波器,而「-gaussian-blur
」是一個 2 維圓柱卷積濾波器。有關更多詳細信息,請參閱卷積。與使用其他「過濾」卷積運算不同,這兩種方法的結果應該相同。但是,兩通道系統意味著存在一個可能發生捨入或量子效應的中間階段。Cristy 在他報告時也證實了這一點……您應該始終使用「-blur
」而不是「-gaussian-blur
」,因為它更快。由於捨入,內部的一些像素會有所不同,並且邊緣像素可能會有所不同,因為在中間階段會失去虛擬像素邊緣效應。總之,這兩個運算符略有不同,但差異很小。由於「-blur
」要快得多,請使用它。我在幾乎所有涉及模糊的示例中都這樣做了。使用調整大小進行大模糊
對圖像模糊使用較大的 sigma 值非常慢。但是,可以使用一種技術來加快此過程。然而,這只是一種粗略的方法,可能需要一些數學上的嚴謹性來改進結果。從本質上講,大模糊速度慢的原因是因為您需要一個大的窗口或「內核」來合併大量像素,對於圖像中的每個像素。但是,調整大小(縮小圖像)會做同樣的事情,但在過程中生成的像素更少。該技術基本上是縮小圖像,然後再次放大以生成高度模糊的結果。高斯濾波器對此特別有用,因為您可以直接指定要定義的高斯 Sigma。例如,在這裡,我使用這兩種方法通過 sigma 值為 5 來模糊小玫瑰圖像。
magick rose: -blur 0x5 rose_blur_5.png magick rose: -filter Gaussian -resize 50% \ -define filter:sigma=2.5 -resize 200% rose_resize_5.png |
![[IM Output]](../images/rose.png)

![[IM Output]](rose_blur_5.png)
![[IM Output]](rose_resize_5.png)
銳化圖像


The most important factor is the sigma. As it is the real control of the sharpening operation. It is only due to historical accident it is the second term in the above. It can be any floating point value from .1 for practically no sharpening to 3 or more for sever sharpening. 0.5 to 1.0 is rather good. Radius is just a limit of the effect as is the threshold. Radius is only in integer units as that is the way the algorithm works, the larger it is the slower it is. But it should be at a minimum 1 or better still 2 times the sigma.首先忘記第一個數字,只需使用 0,它將根據您提供的「sigma」值使用最佳數字。sigma 值越大,銳化程度越高。
-sharpen 0x.4 | 非常小 |
-sharpen 0x1.0 | 大約一個像素大小的銳化 |
-sharpen 0x3.0 | 可能太大了 |
-sharpen
」運算符是一種反向模糊。事實上,它的工作原理幾乎相同。有關顯示這與模糊有何關係的範例,請參閱透過插值和外推法進行圖像處理。例如,讓我們模糊一個簡單的圖像,然後嘗試再次銳化它以消除模糊。
magick -font Gecko -pointsize 72 label:A A_original.jpg magick A_original.jpg -blur 0x3 A_blur.jpg magick A_blur.jpg -sharpen 0x3 A_blur_sharp.jpg magick A_blur_sharp.jpg -sharpen 0x3 A_blur_sharp_x2.jpg |
![[IM Output]](A_original.jpg)

![[IM Output]](A_blur.jpg)

![[IM Output]](A_blur_sharp.jpg)

![[IM Output]](A_blur_sharp_x2.jpg)
非銳化圖像


-sharpen
」和「-unsharp
」運算符都使用從原始圖像中減去模糊的相同技術。有關「-sharpen
」和「-unsharp
」實際工作原理的內部細節,請參閱非銳化卷積。
From comments on Sharpening with ImageMagick from Alex Beels Matching GIMP unsharp Take gimp radius and add 1 => IM sigma Threshold divide by 255 => IM Threshold So GIMP radius=2 amount=1.5 threshold=5 results in -unsharp 0×3+1.5+0.0196 Another suggested that im_sigma = sqrt(gimp_radius) Raw notes from Fred Weinhaus Blur Image for test. A_original.jpg magick A_original.jpg -blur 0x3 A_original_blur3.jpg sharpen is just a gaussian type blurred image subtracted from the image to make an edge image (high pass filter), then equally blends that back with the original, so one has a high pass enhanced image. magick A_original_blur3.jpg -sharpen 0x3 A_original_blur3_sharp3.jpg unsharp is more complex. It is similar. It takes the difference (edge result) as above, i.e. like sharpen BUT only blends some fraction or multiple of that with the original image, AND only if the difference is above a threshold. Thus unsharp 0x3+1+0 is basically the same as sharpen 0x3 magick A_original_blur3.jpg -unsharp 0x3+1+0 A_original_blur3_unsharp3_1_0.jpg compare -metric rmse A_original_blur3_sharp3.jpg A_original_blur3_unsharp3_1_0.jpg null: 164.661 (0.00251256) The difference may be due to whether one uses a separable (gaussian) blur filter or not in one or the other but not both. Or it could be just some slight differences elsewhere in the IM implementation. If one blends less with the original, one gets less sharpening. magick A_original_blur3.jpg -unsharp 0x3+0.5+0 A_original_blur3_unsharp3_0p5_0.jpg If one blends more with the original, one gets more sharpening. magick A_original_blur3.jpg -unsharp 0x3+2+0 A_original_blur3_unsharp3_2_0.jpg If one increases the threshold, then one gets less sharpening again. magick A_original_blur3.jpg -unsharp 0x3+2+0.2 A_original_blur3_unsharp3_2_0p2.jpg Several of my (Fred's) scripts, binomialedge, gaussianedge, sharpedge use this blending concept (between the high pass filtered result and the original image) and a description is there with the scripts. The thresholding in my scripts is done differently and for a different purpose. Sharpen using de-convolution There is a technique of using de-convolution (division in a Fast-Fourier generated frequency form of images), This works best when the exact 'blur' that was applied to the original image is known, or calculated in some way. At the moment only raw 'DIY' methods are as yet available in IM and a number of such methods are demonstrated (trialed) in the sub-section Fourier Multiply/Divide.
產生陰影
「-shadow
」運算符是一種進階運算符,是使用 IM 範例頁面開發的。基本上,它表示對給定圖像的透明度形狀進行非常複雜的模糊和重新著色。這是 IM 使用者始終執行的操作,但需要大量的知識才能正確完成。該運算符將採用一個圖像(通常是一個副本,並且可能已經具有一些透明度),並將其變成一個陰影圖像,然後可以將其放置在原始圖像下方給定的偏移量處(通常使用特殊的圖層合併運算符)。例如,這是一個標準的陰影化現有圖像的方法,使用與此網頁匹配的海軍藍陰影顏色。
|
![]() |
|
![]() |
-layers merge
」將陰影圖像與原始圖像進行分層,可以輕鬆地從任何方向的光源產生陰影,而不僅僅是左上角。
|
![]() |
+repage
" 會移除最終「圖層」影像中可能存在的任何負或正偏移量。 如需其他技術,請參閱 陰影與偏移量問題。![]() ![]() |
圖層合併 方法已新增至 IM v6.3.6-2。 在此之前,您需要改用類似的圖層平面化運算子 "-mosaic "。 然而,此運算子存在一些問題(請參閱下文)。 |
形狀陰影
現在,"-shadow
" 的設計是針對形狀影像(這就是它如此複雜的原因)。 例如,以下是一個典型的陰影字體。DstOver
' 合成方法,以避免交換兩張影像的順序。
|
![]() |
陰影與偏移量問題
陰影的問題在於模糊陰影會向四面八方擴展。 為了彌補這一點,"-shadow
" 運算子會在實際原始影像周圍添加邊框,其大小為模糊「sigma」值的 2 倍,從而放大影像。 也就是說,如果您使用 'x3
' 來模糊陰影,它會將影像放大 12 個像素(每邊 2 乘以 3 個像素)。 為了彌補這種放大,陰影影像還會獲得適當的負 虛擬畫布偏移量,以便相對於被投影陰影的影像正確定位。 對於一般影像,這表示生成的陰影影像將具有負偏移量。 然而,當您的 IM 沒有 "-layers
" 方法 'merge
' 可用時,就會產生問題。 例如,在這裡,我們嘗試在影像左側添加陰影,就像光線從右上方照射過來一樣。
|
![]() |
-mosaic
" 運算子裁剪掉了。 不妙! 一種解決方案是在原始影像中添加初始偏移量,這樣產生的陰影影像偏移量就不會是負數。
|
![]() |
-mosaic
" 在一起之前移除任何負偏移量。 請注意在 "-repage
" 中使用 '!
' 標誌將給定的偏移量添加到兩張影像中。
|
![]() |
|
![]() |
![]() ![]() |
請注意,雖然上述內容實際上並不需要「-compose Over 」設定,但建議使用。否則,後續操作(即使在其他「magick 」命令中)可能會受到影響,並產生意外結果。也就是說,非標準的合成設定可能會影響其他操作,包括:影像分層、新增邊框或框架,或只是其他合成。 |
陰影與合成
論壇上的許多人會產生陰影影像,然後嘗試使用較低階的「-composite
」來合併影像。例如,將原始影像直接覆蓋在產生的(較大)陰影影像上。
|
![]() |
-gravity Center
」設定,因為放大的陰影影像是從四面八方平均擴展的。
|
![]() |
陰影輪廓
您也可以使用「-shadow
」產生形狀的模糊輪廓,例如文字。透過使用圖層合併,IM 會自動新增半透明模糊所需的多餘空間。
|
![]() |
|
![]() |
-shadow
」產生的偏移量(使用「+repage
」),並將原始影像覆蓋在較大的陰影影像上並置中。透過新增「-geometry
」合成偏移量,您可以將陰影偏移作為一個單獨的動作。
|
![]() |
x0
」模糊「sigma」),除非您在陰影影像中包含一些填充空間以覆蓋原始影像。然而,對於柔和的模糊陰影來說,這很少會成為問題。有關陰影的一些實際範例,請參閱縮圖陰影和更好的 3D 標誌產生。蒙太奇命令中的陰影
從 IM v6.3.1 版開始,「magick montage
」「-shadow
」設定開始使用這個運算子提供的柔和「形狀」陰影。
|
![]() |
magick montage
」除了簡單的開啟/關閉選項之外,從未提供過此類控制項。陰影內部
在內部,「-shadow
」非常複雜。基本上,它不僅需要放大影像以容納「柔和的模糊陰影」,還需要模糊影像的現有形狀,適當設定其顏色,最後調整虛擬頁面/畫布偏移量;所有這些都根據用戶的規格進行。例如,給定以下「-shadow
」命令...
magick image_clone.png -shadow 60x4+5+5 image_shadow.png |
magick image_clone.png -alpha set \ -bordercolor none -border 8 -repage -8-8\! \ -channel A -virtual-pixel transparent \ -blur 8x4 -evaluate multiply .60 +channel -fill {background_color} -colorize 100% \ -repage +5+5\! image_shadow.png |
![]() ![]() |
據我所知,PNG 和 MIFF 格式是唯一可以處理負偏移量以及半透明像素的影像格式。我建議在保存陰影影像以供將來使用時使用 PNG。 |
-shadow
」是一個非常複雜的操作。當然,雖然上面的例子與「-shadow
」內部的功能很接近,但並不完全相同。實際的「-shadow
」運算子不會更改任何全域設定,例如邊框/背景/填充顏色,或當前的虛擬像素設定。此外,如果模糊 sigma 設定為 0,它將會短路「-blur
」運算子的使用,以防止模糊函數針對零 sigma 或半徑發出警告。FUTURE: overlaying multiple shadows Overlaying two images with shadows, produces an unrealistic darkening of the shadow where the shadow overlaps. This darkening would be correct if each object was lit by separate light sources, but more commonly the objects are lit by the same light source. The solution is to overlay the one image over the other, applying the shadow effects to the opaque parts of each layer image in turn. That is, the background shadow should be generated separately into each layer. Remember the shadow cast by the top most layer should become fuzzier than the shadow contribution of the bottom most layer. This complexity gets worse when you have three objects shadowing each other. Also the offset and blurring from the shadow of each object should technically be separate. To generate that level of complexity, probably a 3-d ray-tracing program should be used instead (sigh).
特殊模糊
IM 6 版本中還添加了一些其他類型的模糊,它們具有非常特殊的用途。這些操作以特定方式運作,而不是像大多數其他「卷積」樣式操作那樣在所有方向上運作。它們的效果也可能不如其他產生特殊模糊的方法,例如在更普通的模糊之前和之後扭曲影像。例如,請參閱極座標循環技巧和橢圓形(映射)模糊。
警告:所有這些模糊處理都是實驗性的,語法可能會改變!
徑向模糊
您可以使用「-radial-blur
」將圖像周圍模糊成一個圓圈,就像它在旋轉一樣。雖然從技術上講,這是一種旋轉或角度模糊,而不是徑向模糊。注意:您可以使用 消偏振 - 旋轉模糊 技術獲得更高質量的結果(儘管速度要慢得多)。但請注意,與普通的「-blur
」運算符一樣,「-radial-blur
」也會受到「-channel
」設置的影響。
|
![]() |
-radial-blur
」效果。
|
![]() |
|
![]() |
|
![]() |
|
![]() |
全圓徑向模糊可用於生成粗略的圓形漸變。然而,制定正確的形狀以生成正確的漸變可能非常困難,而且可能不值得付出努力。不過我確實嘗試過...
|
![]() ![]() |
動態模糊
您可以使用「-motion-blur
」僅在一個方向上添加線性漸變模糊(給定半徑和標準差,以及模糊應該發生的角度)。這使您的圖像看起來好像它(或相機)正在快速移動。
|
![]() |
-motion-blur
」來改善。
|
![]() |
|
![]() |
|
![]() |
請注意,雖然「
-radial-blur
」在兩個方向上模糊,「-motion-blur
」僅在一個方向上模糊。在這兩種情況下,我都建議您在邊緣周圍填充額外的空間(通常使用「-border
」),因為這兩種特殊模糊都具有很強的邊緣效應,最好避免。如果您發現以上內容有更實用或有趣的示例或用途,請發送電子郵件給我一份副本(地址位於頁面頁腳)。使用模糊羽化形狀


例如,這裡我有一個 GIF 圖像,我在上面疊加了一個淺色背景
|
![]() |
但是,通過稍微模糊圖像透明度,我可以使疊加層更平滑地融入背景。
|
![]() |
請注意,由於模糊會同時延伸到形狀區域的內部和外部,因此必須調整 Alpha 色板,以便形狀的邊緣為零(完全透明)。但隨著距離邊緣越來越遠,它會迅速變為完全不透明。 具有透明度處理的 CLUT 提供了此類 Alpha 色板調整的一個範例。這種調整至關重要,否則,您將添加形狀外部區域的半透明陰影或光暈,而不是淡化形狀外部區域。基本上是一些以前被圖像透明度隱藏的半透明「未定義顏色」。但是,模糊有一個特別棘手的問題,即也會平滑形狀的輪廓。例如...
|
![]() |
|
![]() |
|
![]() |
相關運算符
Basic image modifications -despeckle -enhance -noise -spread -displace -median Set each channel color of the pixel to the median value of all all pixels within a given radius. (median = center most value of all values found, half on one side, half on the other). This is a way of "de-speckling" an image (such a dust in a scan). But could distort edges, cause some color channel aburation, and remove thin lines. This filter is the best technique to use for removing Salt & Pepper noise, especially on gray scale images. It is suggested that a trim for a scan use a median filtered image for attempting to find the appropriate bounding box. -adaptive-sharpen radius x sigma Adjust sharpening so that it is restricted to close to image edges as defined by edge detection. See forum discussion https://magick.imagemagick.org/viewtopic.php?f=1&t=10266 -adaptive-blur radius x sigma Blur images, except close to the edges as defined by an edge detection on the image. Eg make the colors smoother, but don't destroy any sharp edges the image may have. -adaptive-resize Resize but attempt not to blur across sharp color changes