摘要:對上面公式進行改進,加入變形程度控制變量,改進后瘦臉公式如下,優缺點優點形變思路簡單直接缺點局部變形算法,只能基于一個中心點,向另外一個點的方向啦。單點拉伸的變形,可以實現瘦臉的效果,但是效果自然度有待提升。
論文:Interactive Image Warping(1993年Andreas Gustafsson)
算法思路:
假設當前點為(x,y),手動指定變形區域的中心點為C(cx,cy),變形區域半徑為r,手動調整變形終點(從中心點到某個位置M)為M(mx,my),變形程度為strength,當前點對應變形后的目標位置為U。變形規律如下,
其中,x是圓內任意一點坐標,c是圓心點,rmax為圓心半徑,m為調整變形的終點,u為圓內任意一點x對應的變形后的位置。
對上面公式進行改進,加入變形程度控制變量strength,改進后瘦臉公式如下,
優缺點:
優點:形變思路簡單直接
缺點:
代碼實現:
import cv2import mathimport numpy as npdef localTranslationWarpFastWithStrength(srcImg, startX, startY, endX, endY, radius, strength): ddradius = float(radius * radius) copyImg = np.zeros(srcImg.shape, np.uint8) copyImg = srcImg.copy() maskImg = np.zeros(srcImg.shape[:2], np.uint8) cv2.circle(maskImg, (startX, startY), math.ceil(radius), (255, 255, 255), -1) K0 = 100/strength # 計算公式中的|m-c|^2 ddmc_x = (endX - startX) * (endX - startX) ddmc_y = (endY - startY) * (endY - startY) H, W, C = srcImg.shape mapX = np.vstack([np.arange(W).astype(np.float32).reshape(1, -1)] * H) mapY = np.hstack([np.arange(H).astype(np.float32).reshape(-1, 1)] * W) distance_x = (mapX - startX) * (mapX - startX) distance_y = (mapY - startY) * (mapY - startY) distance = distance_x + distance_y K1 = np.sqrt(distance) ratio_x = (ddradius - distance_x) / (ddradius - distance_x + K0 * ddmc_x) ratio_y = (ddradius - distance_y) / (ddradius - distance_y + K0 * ddmc_y) ratio_x = ratio_x * ratio_x ratio_y = ratio_y * ratio_y UX = mapX - ratio_x * (endX - startX) * (1 - K1/radius) UY = mapY - ratio_y * (endY - startY) * (1 - K1/radius) np.copyto(UX, mapX, where=maskImg == 0) np.copyto(UY, mapY, where=maskImg == 0) UX = UX.astype(np.float32) UY = UY.astype(np.float32) copyImg = cv2.remap(srcImg, UX, UY, interpolation=cv2.INTER_LINEAR) return copyImgimage = cv2.imread("./tests/images/klst.jpeg")processed_image = image.copy()startX_left, startY_left, endX_left, endY_left = 101, 266, 192, 233startX_right, startY_right, endX_right, endY_right = 287, 275, 192, 233radius = 45strength = 100# 瘦左邊臉 processed_image = localTranslationWarpFastWithStrength(processed_image, startX_left, startY_left, endX_left, endY_left, radius, strength)# 瘦右邊臉 processed_image = localTranslationWarpFastWithStrength(processed_image, startX_right, startY_right, endX_right, endY_right, radius, strength)cv2.imwrite("thin.jpg", processed_image)
實驗效果:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/125087.html
摘要:查看行業專題分析報告就上參一江湖,更多專題報告持續更新中。 查看行業專題分析報告就上參一江湖,更多專題報告持續更新中。每項專題報告都是從2019開始更新到至今,后續將持續更新... 今天為大家分享天然氣專題研究報告的部分目錄如下 : ———————公眾號:參一江湖——————— ?2021...
摘要:前幾天由于團隊需要,折騰了一下圖像液化的處理過程。現在來整理一下思路,做個記錄。用到公式如下,網上拿來的話不多說,上代碼本來想盡量寫出點逼格。。。后來發現怎么寫也還是幾個搞定,就那樣了。然后再用的把轉換后的輸出到中效果圖如下 前幾天由于團隊需要,折騰了一下圖像液化的處理過程。 現在來整理一下思路,做個記錄。 用到公式如下,網上拿來的 showImg(https://segm...
摘要:前幾天由于團隊需要,折騰了一下圖像液化的處理過程。現在來整理一下思路,做個記錄。用到公式如下,網上拿來的話不多說,上代碼本來想盡量寫出點逼格。。。后來發現怎么寫也還是幾個搞定,就那樣了。然后再用的把轉換后的輸出到中效果圖如下 前幾天由于團隊需要,折騰了一下圖像液化的處理過程。 現在來整理一下思路,做個記錄。 用到公式如下,網上拿來的 showImg(https://segm...
摘要:最少知識原則的終極目標的是實現完全傻瓜式的程序。我們如何做到解除對象間的耦合性主要手段還是很多的。最少知識原則的實現其實,最少知識原則和單一原則所達到目的是相似的,一個是,讓你的程序對外盡量簡單,一個是讓你的程序里的對象,相互聯系盡量簡單。 最少知識原則的終極目標的是實現完全傻瓜式的程序。 舉個例子吧, 就比如 美圖神器, 你上傳一張鳳姐的照片后,你可以選擇 自然磨皮,高度磨皮 -> ...
閱讀 2316·2021-11-25 09:43
閱讀 3456·2021-10-25 09:48
閱讀 1331·2021-09-13 10:24
閱讀 2740·2019-08-29 15:07
閱讀 1279·2019-08-29 13:14
閱讀 3276·2019-08-29 12:22
閱讀 1362·2019-08-29 11:32
閱讀 3247·2019-08-29 11:23